汇编语言程序员

段前缀的使用

2018-08-16  本文已影响1人  柠檬就是酸

问题:

将内存ffff:0~ffff:b单元中的数据复制到0:200~0:20b单元中。

分析:

先将内存偏移调成一样的,也就是0:2000:20b单元等同于0020:00020:b单元,复制的过程用循环来实现

代码:

assume cs:code

code segment

zhao:mov bx,0           ;偏移地址从0开始
         mov cx,12          ;总共循环12次
       s:mov ax,0ffffH
         mov ds,ax
         mov dl,[bx]        ;将ffff:bx中的数据送入dl
         mov ax,0020H
         mov ds,ax
         mov [bx],dl        ;将dl的数据送入0020:bx
         inc bx             ;偏移地址加1
         loop s
         mov ax,4c00H
         int 21h
code ends
end zhao

这个程序是可以实现功能的,但是每次循环要设置两次ds,效率不高,可以使用两个段寄存器分别存放原始单元ffff:X和目标单元0020:X的段地址。

修改后的代码如下:

assume cs:code

code segment

zhao:mov ax,0ffffH

         mov ds,ax          ;(ds)=0ffffH
         mov ax,0020H
         mov es,ax          ;(es)=0020H
         mov bx,0           ;偏移地址从0开始
         mov cx,12          ;总共循环12次
         ;此时,ds:bx指向ffff:0,    es:bx指向0020:0
       s:mov dl,[bx]        ;将ffff:bx中的数据送入dl
         mov es:[bx],dl     ;将dl的数据送入0020:bx
         inc bx             ;偏移地址加1
         loop s
         mov ax,4c00H
         int 21h
code ends
end zhao

其中,这行代码使用了段前缀:

mov es:[bx],dl     ;将dl的数据送入0020:bx

代表将dl的数据送入0020:bx

上一篇下一篇

猜你喜欢

热点阅读