问题7.2:用si和di寄存器将字符串welcome to masm!复制到它后面的数据区中
-
寄存器SI、DI与BX功能接近,但是不能拆分成两个8位寄存器;
我的解答
assume cs:codeseg,ds:dataseg
dataseg segment
db 'welcome to masm!'
db '................'
dataseg ends
codeseg segment
start: mov si,dataseg
mov ds,si
mov di,0
mov cx,8
s: mov si,[di]
mov [16+di],si
add di,2
loop s
mov ax,4C00H
int 21H
codeseg ends
end start
- 核心思路:一次复制2个字节(字单元),循环次数是8次
以 welcome to masm 为例,以字单元传输如下:
w 0111 0111 77H
e 0110 0101 65H
l 0110 1100 6CH
c 0110 0011 63H
依次类推,
以字单元传输,一次传送16位,刚好就是两个字符
问题7.2: 书上的解答
codeseg segment
start: mov ax,dataseg
mov ds,ax
mov si,0
mov di,16
mov cx,8
s: mov ax,[si]
mov [di],ax
add si,2
add di,2
loop s
mov ax,4c00H
int 21H
codeseg ends
end start
- 用
ds:si
指向原始字符串;
- 用
ds:di
指向目的空间;
- 传输单元同样是2个字节(字单元),循环次数同样是8次;
问题7.3 [bx(si 或 di) + idata],更少的代码