JamesLiu 发表于 2018-8-24 22:12:31

实验5(5)疑惑



       实验5
                (5)编写code段中的代码,将a段和b段的数据依次相加,将结果存储在c段中


                        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

c segment
                        db 0,0,0,0,0,0,0,0
                       
c ends

code segment

        start: mov ax,a
                   mov ds,ax
                  
                   mov ax,b
                   mov es,ax
                  
                   mov ax,c
                   mov ss,ax
                   mov sp,20h
               
                   mov ax,0
                   mov bx,0
                   mov cx,8
       
        s:                 movax,ds:
                        addax,es:
                       
                        push ax
                        mov ax,0
                        add bx,2
                        loop s
                       
               mov ax,4c00h
               int 21h
               
        code ends
        end start

为什么a段和b段依次相加的数据没有成功的存储到c段(SS:SP内)?


TZJ5200 发表于 2018-9-7 08:27:59

解法一:

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行。

TZJ5200 发表于 2018-9-7 08:32:45

你写的 mov sp,20h 是个什么鬼啊?
页: [1]
查看完整版本: 实验5(5)疑惑