段前缀的使用

作者: 柠檬就是酸 | 来源:发表于2018-08-16 16:18 被阅读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

    相关文章

      网友评论

        本文标题:段前缀的使用

        本文链接:https://www.haomeiwen.com/subject/dzdobftx.html