
我的答案:运用段寄存器,对单字节进行操作
assume cs:code,ds:a,ss:b,es:c
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 ss,ax
mov sp,0000
mov ax,c
mov es,ax
mov cx,8
mov bx,0
s: pop ax
dec sp ;pop一次sp+2,我们想操作单字节,需要将pop-1
mov es:[bx],al ;低位存储的是低地址的数据
mov ax,ds:[bx]
add es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
官方答案:
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 cx,8
mov bx,0
s:
;每次虽然加上一个字的数据,但是更新后并不影响
mov ax,ds:[bx]
add bx,20h
mov ds:[bx],ax
sub bx,10h
mov ax,ds:[bx]
add bx,10h
add ax,ds:[bx]
mov ds:[bx],ax
sub bx,20h
inc bx
loop s
code ends
end start
更简洁的写法:
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 cx,8
mov bx,0
s:
mov ax,ds:[bx]
mov ds:20h[bx],ax
mov ax,ds:10h[bx]
add ax,ds:20h[bx]
mov ds:20h[bx],ax
inc bx
loop s
code ends
end start
————————————————
版权声明:本文为CSDN博主「ChenyangDu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:<https://blog.csdn.net/happy_Du/article/details/107395870>