当前位置:鱼C工作室 >汇编语言 > 查看文章

直接定址表01 – 零基础入门学习汇编语言72

第十六章:直接定址表01

 

让编程改变世界

Change the world by program


 

描述了单元长度的标号

 

这一章,我们讨论如何有效合理地组织数据,以及相关的编程技术。

本章中,我们要用到这种标号,先进行如下介绍。

 

前面的课程中,我们一直在代码段中使用标号来标记指令、数据、段的起始地址。

比如:下面的程序将code 段中的a 标号处的8个数据累加,结果存储到b标号处的字中。

assume cs:code
code segment
    a : db 1,2,3,4,5,6,7,8
    b : dw 0
 
start :
    mov si,offset a
    mov bx,offset b
    mov cx,8
s : 
    mov al,cs:[si]
    mov ah,0
    add cs:[bx],ax
    inc si
    loop s
    mov ax,4c00h
    int 21h
 
code ends
end start

 

程序中,code、a、b、start、s都是标号。这些标号仅仅表示了内存单元的地址。

但是,我们还可以使用一种标号,这种标号不但表示内存单元的地址,还表示了内存单元的长度,即表示在此标号处的单元,是一个字节单元,还是字单元,还是双字单元。

 

上面的程序我们还可以写成这样:–>>

assume cs:code
code segment
    a db 1,2,3,4,5,6,7,8
    b dw 0
start :  
    mov si,0
    mov cx,8
s : mov al,a[si]
    mov ah,0
    add b,ax
    inc si
    loop s
    mov ax,4c00h
    int 21h
 
code ends
end start

 

我们在code 段中使用的标号a、b后面没有“:” ,因此它们是可以同时描述内存地址和单元长度的标号。

标号a,描述了地址code:0,和从这个地址开始,以后的内存单元都是字节单元;

而标号b描述了地址code:8,和从这个地址开始,以后的内存单元都是字单元。

 

因为这种标号包含了对单元长度的描述,所以,在指令中,它可以代表一个段中的内存单元。

比如,对于程序中的b dw 0。

指令:mov ax,b 相当于:mov ax,cs:[8]

指令:mov b,2 相当于:mov word ptr cs:[8],2

指令:inc b 相当于:inc word ptr cs:[8]

 

在这些指令中,标号b 代表了一个内存单元,地址为code:8 ,长度为2 字节。

下面的指令会引起编译错误:mov al,b

 

为什么?

 

分页阅读: 1 2 3 下一页
为您推荐

报歉!评论已关闭.