导航

汇编语言及其程序设计

Posted on 2022-07-30 00:33  wuqiu  阅读(268)  评论(0编辑  收藏  举报

在计算机上运行汇编语言程序的步骤:

1)用编辑程序建立.asm文件

2)用汇编程序 MASM 将 .asm 文件转换成 .obj 文件

3)用连接程序 LINK 把 .obj 文件转换成.exe 文件 或 再用 EXE2BIN 程序把 .exe文件转换成 .com 文件

4)在操作系统下直接启动.exe文件或.com文件就可以执行该程序

汇编语言语句格式


//[]内的是可选项

[名字] 操作符 操作数;[注释]

指令格式

**指令的组成 : ** 由前缀、操作码、寻址方式编码、位移量\偏移量、立即数 这五部分组成。

寻址方式

存储器寻址

[BX] 表示访问的并不是 BX 这个寄存器的内容,而是访问以 BX 内容为地址的存储单元

有效地址的计算公式: EA = 基址 + (变址 X 比例因子) + 位移量

存储器寻址时规定,如果使用寄存器 BP、EBP 和 SP、ESP参与寻址,则微处理器默认为访问堆栈段 SS

若使用除寄存器 BP、EBP 和 SP、ESP 以外的所有通用寄存器参与寻址,则微处理器默认为访问数据段 DS

当然这也是可以改变的,如果显式对访问栈进行约束

如 : MOV AL,DS:[BP] 这样即使使用了 BP 但却可以访问 DS

同理 : MOV AL,CS:[BX] 将默认访问的 DS 更改为了 CS

对立即寻址中立即数的要求说明

1)立即数必须以数字开头,以字母开头的十六进制数必须以数字0做前缀。

2)数制用后缀表示,B表示二进制数,H表示十六进制数,D或者缺省表示十进制数,Q表示八进制数。

3)汇编语言在汇编时,对于不同进制的立即数一律汇编成等值的二进制数。

4)有符号数以补码表示。

指令系统

数据传送指令

MOV DST,SRC // 将 SRC 送往 DST  第一个为目的操作数  第二个为源操作数
/*注意:
1)目的操作数不可以为 代码段寄存器 CS  和 立即数
2)立即数不能直接送到段寄存器
3)不允许在两个段寄存器之间直接传送信息*/
/*操作数上[]的含义:
加上[]表示所取出来的数 是[]内寄存器内地址所指向的数据,属于寄存器间接寻址方式。
需要特别注意的是 : CX DX 寄存器不能用于寄存器间接寻址  
在16位寻址中 可以使用的 基址寄存器有 BX BP 变址寄存器有 SI DI
*/