1、基础指令
1.1、MOV
指令
将逗号前的寄存器中的值修改为逗号后寄存器的值、内存的值或指定的值
语法:
mov [寄存器], [需要放入的值]
示例:
mov ax, 100
将 100 赋值到
ax
寄存器
也可以将一个寄存器中的值赋值到另一个寄存器
mov bx, 100 ; 将100赋值到bx
mov ax, bx ; 将bx中的值赋值到ax中
也可以将内存中的值赋值到寄存器中
mov ax, 2000H ; 将段地址先储存到ax中
mov ds, ax ; 设置段地址
mov bx, 1000H ; 将偏移地址储存到bx中,以便引用
mov ax, [bx] ; 将段地址为2000,偏移地址为1000的内存中的值赋值到ax中
mov ax, ds:[bx] ; 效果同上
mov ax, ds:[1000H] ; 效果同上
在源码中,不可以直接使用
[0]
来表示偏移地址,必须引用其他寄存器中的值,或者使用ds:[0]
这种格式。
1.2、使用 idata
可以在程序中使用 idata
更方便的定位到指定的偏移地址
示例:
mov ax, [bx+10]
mov ax, [bx+si+10]
可以在设置偏移地址的方括号中使用运算
1.3、操作符 PTR
一般在执行计算时,指令后的寄存器会默认指定计算的值是字数据还是字节数据。例如:add al, sp:[0]
和 add ax, sp:[0]
,但是在一些特殊情况下,编译器无从得知需要计算的数是字数据还是字节数据,此时,就需要操作符 ptr
来指定数据类型。
语法:
[指令] [word/byte] ptr [操作]
示例:
inc word ptr sp:[0] ; 以字为单位将指定内存中的数据自加
1.4、操作符 OFFSET
取得对应标号的偏移地址
示例:
s:mov ax, offset s ; 将标号s所处的偏移地址复制到ax寄存器中
2、计算指令
2.1、ADD
加法
将第二个值和第一个寄存器中的值相加,并放入第一个寄存器中,用法同 mov
。
语法:
add [寄存器], [需要相加的值]
2.2、 SUB
减法
减法运算,用法同 add
指令
示例:
sub ax, 10
2.2、INC
自增& DEC
自减
自增,将指定的值加一。
语法:
inc [寄存器]
inc [内存地址]
自减,将指定的值减一
语法:
dec [寄存器]
dec [内存地址]
2.3、AND
与运算
逻辑与指令,将两个值进行逻辑与计算
1 and 1 = 1
0 and 1 = 0
1 and 0 = 0
0 and 0 = 0
语法:
and [寄存器、内存地址], [寄存器、内存地址]
示例:
and ax, bx
2.4、OR
或运算
逻辑或云端,将两个值进行逻辑或计算
1 or 1 = 1
0 or 1 = 1
1 or 0 = 1
0 or 0 = 0
语法:
or [寄存器、内存地址], [寄存器、内存地址]
示例:
or ax, bx
2.5、 MUL
乘法
对指定数值进行乘法计算
- 8位的值进行相乘时结果在
ax
中,乘数默认在al
中 - 16位的值进行相乘时
dx
中为高位ax
中为低位,乘数默认在ax
中
2.6、 DIV
除法
除法指令 division
对寄存器的值进行除法运算。
- 当除数为字节型数据时,执行
div
指令后ax
寄存器中的值会被作为被除数- 结果:
al
中为结果的商ah
中为余数
- 当除数为字型数据时