[028][汇编语言]问题7.2 [bx(si 或 di) + idata] 用SI和DI寄存器复制字符串

问题7.2:用si和di寄存器将字符串welcome to masm!复制到它后面的数据区中

  • 寄存器SI、DIBX功能接近,但是不能拆分成两个8位寄存器

我的解答

查看data段数据.png
查看复制效果.png
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],更少的代码

  • 见问题7.2我的解答

你可能感兴趣的:([028][汇编语言]问题7.2 [bx(si 或 di) + idata] 用SI和DI寄存器复制字符串)