分享

汇编语言11---基本语法与分段_db 100 dup(0)

 instl 2023-08-11 发布于广西

一段语法方面五脏俱全的代码

assume cs:code, ds:data, ss:stack

stack segment
    ; 自定义栈段容量
    db 100 dup(0)
stack ends

data segment
    db 100 dup(0)
data ends

code segment
start:  
    mov ax, stack
    mov ss, ax

    mov ax, data
    mov ds, ax

    mov ax, 1122h
    push ax  
    pop bx  
        
    mov ax, 4c00h 
    int 21h
code ends
      
end start

语法:

汇编语言指令分为2类:

汇编指令:如mov、add、sub等
由对应的机器指令,可以被编译为机器指令,最终由CPU执行
伪指令:如assume、segment、ends、end等
没有对应的机器指令,由编译器解析,最终不被CPU执行

segment and ends

其中segment和ends的作用是定义一个栈,segment表示段的开始,ends代表段结束

段名 segment
;;;;
段名 ends

段名可以随意定义,要符合可阅读的准则。一个有意义的汇编程序中,至少要有一个段作为代码段放置代码。

assume

assume的作用是将代码段和mycode段和CPU中的CS寄存器关联起来。

end

end代码程序的结束,编译器遇到end就会结束编译

db dw dup定义

db dw用于定义数据 dup用于批量定义:

db 0h ;定义一个byte的数据,值为00h    无标识
dw 0h ;定义一个word的数据, 值为0000h	无标识
a db 07h ;定义一个byte的数据,值为07h 让标识a指向这个字节
a db 'h' ;定义一个byte的属于,值为字符'h'的ascii码,让标识a指向这个字节
b DB 'Hello', 0 
a db 48h, 65h, 6Ch, 6Ch, 6Fh, 00h ;定义数组并初始化

可以作如下引用:
MOV AL, a[3] 

也可以用指针和变址寄存器(BX, SI, DI, BP):
MOV SI, 3
MOV AL, a[SI]

如果你想定义一个具有一系列相同元素的数组可以用DUP关键字,如:
c DB 5 DUP(9) 
与下面的效果相同:
c DB 9, 9, 9, 9, 9 

d DB 5 DUP(1, 2) 
相同于:
d DB 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 

在数据段定义数据相当于创建全局变量
在栈段定义数据相当于指定栈的大小
代码段一般不会这样定义数据

其他指令DW,DD,DQ,DT与之大致相同
DW(DEFINE WORD)定义一个字(两个字节)长度
DD(DEFINE DOUBLE WORD)定义双字(4个字节)长度
DQ(DEFINE QUARTET WORD)定义四字(8个字节)长度
DT(DEFINE TEN BYTE)定义十字节长度

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多