前言
本文章纯粹用于记录我自己在学习汇编语言中记录的笔记 文章中可能会存在许多错误或混淆的地方,欢迎大家指出 也请各位大佬多多包涵
===================================================================
七种寻址方式
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 右移