【汇编语言】七种寻址方式与运算指令学习笔记

前言

本文章纯粹用于记录我自己在学习汇编语言中记录的笔记
文章中可能会存在许多错误或混淆的地方,欢迎大家指出
也请各位大佬多多包涵

===================================================================

七种寻址方式

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 右移

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值