无名似名 发表于 2018-4-1 14:56:44

实验5(5)

本帖最后由 无名似名 于 2018-4-1 15:05 编辑

assume cs:code

a segment
    db 1,2,3,4,5,6,7,8
a ends

b segment
    db 1,2,3,4,5,6,7,8
b ends

cc segment
    db 0,0,0,0,0,0,0,0
cc ends

; c不能做标号 不知道为啥 知道的指点一下

code segment
start:mov ax,cc
      mov ds,ax

      mov ax,a
      mov es,ax

      mov ax,b
      mov ss,ax
      ; 借用一下栈的段寄存器

      mov bx,0
      ; 初始化地址偏移寄存器
      mov cx,8
      ; 初始化循环量

      s:mov ax,es:
      add ax,ss:
      mov ds:,ax
      ; 单步算法
      ; (ax)=((es)*16+(bx))
      ; (ax)=(ax)+((ss)*16+(bx))
      ; ((ds)*16+(bx))=(ax)
      inc bx
      loop s

      mov ax,4c00h
      int 21h

code ends

end start

顺便想问一句 assument后的段跟不assument的段有啥区别

AlunX 发表于 2018-6-5 00:12:58

c可以用的,你看看报错信息百度一下
我觉得assume相当于指明哪是代码段,哪是什么段

TZJ5200 发表于 2018-9-7 08:34:57

解法一:

assume cs:code

a segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使a段不满16字节,也占用0-f内存空间。
a ends

b segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使b段不满16字节,也占用10-1f内存空间。
b ends

k segment
    db 0, 0, 0, 0, 0, 0, 0, 0 ;即使k段不满16字节,也占用20-2f内存空间。
k ends

code segment
start: mov ax,a      
       mov ds,ax       ;将a段关联ds段。则使用偏移地址即可得到b、k段数据。
   
         mov bx,0h       ;编译器默认十进制。
         mov cx,8

   s:mov ax,0h
       add al,
       add al, ;b段在a段基础上偏移10H。
       mov ,al ;k段在a段基础上偏移20H。
       inc bx
       loop s
   
       mov ax, 4c00H
       int 21H
         
code ends
end start            ;代码33行。

解法二:

assume cs:code

a segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使a段不满16字节,也占用0-f内存空间。
a ends

b segment
    db 1, 2, 3, 4, 5, 6, 7, 8 ;即使b段不满16字节,也占用10-1f内存空间。
b ends

k segment
    db 0, 0, 0, 0, 0, 0, 0, 0 ;即使k段不满16字节,也占用20-2f内存空间。
k ends

code segment
start:mov ax,a
          mov ss,ax         ;将a段关联ss段。
          mov ax,b
          mov es,ax         ;将b段关联es段。
          mov ax,k
          mov ds,ax         ;将k段关联ds段。因为要将结果存到k段中,
                        ;所以k段关联ds段代码看起来更清爽。
             mov bx,0
          mov cx,8
         
    s:mov al,ss:    ;将a段数据赋予al中。
          add al,es:    ;将b段数据相加至al中
          mov ,al       ;将a、b段数据相加结果赋予k段中。
          inc bx         
          loop s
         
          mov ax,4c00h
          int 21h
         
code ends
end start               ;代码36行。

红烧甲鱼 发表于 2018-9-20 12:39:51

TZJ5200 发表于 2018-9-7 08:34
解法一:

assume cs:code


解法2不需要指明栈段的偏移地址SP的值吗?我是小白,没看太明白,所以问问

TZJ5200 发表于 2018-9-21 16:08:53

红烧甲鱼 发表于 2018-9-20 12:39
解法2不需要指明栈段的偏移地址SP的值吗?我是小白,没看太明白,所以问问

没用,所以不用指明。

13005674659 发表于 2019-12-16 11:44:59

    movbx ,0
    movcx ,8
s:moval ,cs:
    add bx,16
    add cs:,al
    mov al,cs:
    add bx,16
    mov cs:,al
    inc bx
loop s
这样可以?
页: [1]
查看完整版本: 实验5(5)