王道408计组汇编语言部分学习总结
最佳答案 问答题库708位专家为你答疑解惑
x86汇编语言指令基础
x86处理器中程序计数器PC 通常被称为IP
高级语言—>汇编语言—>机器语言
x86架构CPU,有哪些寄存器
EAX通用寄存器EBXECXEDXESI变址寄存器
变址寄存器可用于线性表、字符串的处理EDIEBP堆栈基指针堆栈寄存器用于实现函数调用ESP堆栈顶指针
mov eax, ebx
#寄存器—>寄存器mov eax, dword ptr [af996h]
#主存→寄存器mov eax, 5
#立即数—>寄存器moveax, dword ptr[ebx]
#将ebx所指主存地址的32bit复制到eax寄存器中mov dword ptr [ebx], eax
#将 eax的内容复制到ebx所指主存地址的32bitmov eax, byte ptr [ebx]
#将ebx所指的主存地址的8bit复制到eaxmov eax, [ebx]
#若未指明主存读写长度,默认32 bitmov [af996h], eax
#将eax的内容复制到af996h所指的地址(未指明长度默认32bit)mov eax, dword ptr [ebx+8]
#将ebx+8所指主存地址的32bit复制到eax寄存器中
常用的x86汇编指令
1. 常见的算数运算指令
加addadd d,s#计算d+s,结果存入d减subtractsub d,s#计算d-s,结果存入d乘multiplymul d,s#无符号数d*s,乘积存入dimul d,s#有符号数d*s,乘积存入d除dividediv s#无符号数除法edx:eax/s,商存入eax,余数存入edx(被除数已经放到edx:eax中)idiv s#有符号数除法edx:eax/s,商存入eax,余数存入edx取负数negativeneg d#将d取负数,结果存入d自增++increaseinc d#将d++,结果存入d .自减--decreasedec d#将d--,结果存入dd:destination,目的地(如:寄存器或内存)
s:source,来源地(寄存器,主存,常量)
目的操作数d不可以是常量(因为是把s的东西放到d里)
举例:
add <reg>, <reg> / sub Kreg>, <reg>
add <reg>, <mem> / sub <reg>, <mem>
add <mem>, <reg> / sub <mem>, <reg>
add <reg>, <con> / sub <reg>, <con>
add <mem>, <con> / sub <mem>, <con>
<reg> 的意思是:|寄存器|register
<mem> 的意思是:|内存|memory
<con> 的意思是:|常数|constant
sub eax, 10 #eax←eax-10
add byte ptr [var], 10 #10与var值指示的内存地址的一-字节值相加,并将结果
保存在var值指示的内存地址的字节中
2. 常见的逻辑运算指令
与andand d,s#将d、s逐位相与,结果放回d或oror d,s#将d、s逐位相或,结果放回d非notnot d#将d逐位取反,结果放回d异或exclusive orxor d,s#将d、s逐位异或,结果放回d左移shift leftshI d,s#将d逻辑左移s位,结果放回d (通常s是常量)右移shift rightshr d,s#将d逻辑右移s位,结果放回d (通常s是常量)3. 其他指令
用于实现分支结构、循环结构的指令: cmp、 test、 jmp、 jxxx
用于实现函数调用的指令: push、pop、call、 ret
用于实现数据转移的指令: mov
3.1 无条件转移指令jmp
jmp <地址>
#PC无条件转移至<地址>
jmp 128
#<地址>可以用常数给出
jmp eax
#<地址>可以来自于寄存器
jmp [999]
#<地址>可以来自于主存
jmp NEXT
mov ecx,ebx
NEXT:
mov ecx,eax
#<地址>可以用“标号”锚定
3.2 条件转移指令j***
je <地址>
#jump when equal, 若a==b则跳转
jne <地址>
#jump when not equal, 若a !=b则跳转
jg <地址>
#jump when greater than, 若a>b则跳转
jge <地址>
#jump when greater than or equal to,若a>=b则跳转
jl <地址>
#jump when less than, 若a<b则跳转
jle <地址>
#jump when less than or equal to, 若a<=b则跳转
cmp eax,ebx #比较寄存器eax和ebx里的值
jg NEXT #若eax > ebx,则跳转到 NEXT:
3.3 函数调用指令
函数调用指令: call<函数名>
函数返回指令: ret
call指令的作用:
①将IP旧值压栈保存(保存在函数的栈帧顶部)
②设置IP新值,无条件转移至被调用函数的第一条指令
ret指令的作用:
从函数的栈帧项部找到IPI旧值,将其出栈并恢复IP寄存器
push eax #将寄存器eax的值压栈
push 985 #将立即数985压栈
push [ebp+8] #将主存地址[ebp+8]里的数据压栈pop eax #栈项元素出栈,写入寄存器eax
pop [ebp+8] #栈项元素出栈,写入主存地址:[ebp+8]
push. pop指令实现入栈、出栈操作,x86 默认以4字节为单位。指令格式如下:
Push A //先让esp减4,再将A压入
Pop B //栈项元素出栈写入B,再让esp加4
注1:A可以是立即数、寄存器、主存地址:
注2:B可以是寄存器、 主存地址
99%的人还看了
相似问题
- 寄存器、缓存、内存之间的关系和区别
- 北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595
- PCIe寄存器之二
- 嵌入式养成计划-51----ARM--ARM汇编指令--内存读写指令--程序状态寄存器传输指令--软中断指令--混合编程
- 野火霸天虎 STM32F407 学习笔记_3 尝试寄存器映射方式点亮 LED 灯
- verilog——移位寄存器
- ARMday03(寄存器读写、栈、程序状态寄存器、软中断和异常、混合编程)
- 【单片机基础小知识-如何通过指针来读写寄存器】
- verilog 每日一练- 移位寄存器
- 汇编的各种指令(数据搬移、移位、位运算、算数、比较、跳转、特殊功能寄存器、单寄存器、多寄存器、栈指针指令)
猜你感兴趣
版权申明
本文"王道408计组汇编语言部分学习总结":http://eshow365.cn/6-13628-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: vue3中使用editor.js
- 下一篇: 面试算法14:字符串中的变位词