前言
本文章纯粹用于记录我自己在学习汇编语言中记录的笔记
文章中可能会存在许多错误或混淆的地方,欢迎大家指出
也请各位大佬多多包涵
===================================================================
七种寻址方式
1.立即数寻址【特点:操作数在指令中,作为指令的一部分 跟在操作码后存放在代码段
assume cs:code
code segment
start:
mov ax,1111h
其中 111h则为立即数
code ends
end start
2.寄存器寻址
说明:操作数在寄存器中,在硬编码中指定的是寄存器的编号
如 mov ax,bx
这里的bx则表示的是寄存器
3.直接寻址方式
说明:操作数在内存中,指令直接包含操作数的有效地址
如:[bp+4]
注释:[]的作用是取里面的值
如cs:[1000]
就是取cs段加上1000offet的地址上面的值
mov ax,cs:[0h]就是直接寻址
4.寄存器间接寻址
说明:操作数在内存中 但是操作数的地址在SI,DI,BX,BP这四个寄存器之一中
mov bx,0
mov ax,[bx]
先利用BX寄存器存有效地址 然后再取出它的值最后将取出的值赋值给其他寄存器
注释:
SI DI BX 默认值是DS段
BP是SS段
5.寄存器相对寻址
说明:操作数是存在内存中的,操作数的地址是通过一个基址
寄存器或者变址寄存器加上偏移找到的
`code segment
radd proc
push bp
mov bp,sp
mov si,[bp+4]
mov di,[bp+6]
【重要的是上两行,是通过bp寄存器地址上下来找到的】
add si,di
mov ax,si
pop bp
radd endp
start:
mov ax,4
mov bx,5
push ax
push bx
call radd`
补充:基址寄存器有BP和BX
变址寄存器有SI和DI
6.基址加变址寻址
说明:操作数在内存中,操作数的有效地址是一个基址寄存器加上变址寄存器的内容,如果有BP,默认段为SS段,否则默认为DS段
mov bx,0
mov si,0
mov ax,[bx+si]
7.相对基址加变址寻址
说明:操作数在内存中,操作数的有效地址是一个基址寄存器和变址寄存器再加上偏移量
mov bx,0
mov si,0
mov ax[bx+si+2]
1.算数运算
inc 自增
dec 自减
add 加法
sub 减法
mul 无符号乘法
imul 有符号乘法
div 无符号除法
idiv 有符号除法
mul
mul 乘法只有一个操作数
mul oprd
oprd放的是被乘数
如
mov ax,10
mov bx,20
mul bx
bx的值为10乘20
ax被通常用为寄存乘数的地方
div
ax被用为寄存除数且用为寄存结果的地方
而DX则被用为寄存余数
位运算
and 与 相同为1 不同为0
or 或 一侧为1 均为1
not 非 原为1 现为0 原为0 现为1
xor 异或 不同为1 相同为0
shl 左移
shr 右移