在计算机上运行汇编语言程序的步骤:
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
*/