汇编语言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)定义十字节长度

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值