微网站建设 合同,网站怎么做的有创意,网站通栏广告设计,开发网站的公司一.说明
本篇博客是基于考研之计算机组成原理中的程序机器级代码表示进行学习的#xff0c;并不是从汇编语言这一门单独的课程来学习的#xff0c;涉及的汇编语言知识多是帮助你学习考研之计算机组成原理中对应的考点。
二.相关寄存器
1.相关寄存器
X86处理器中有8个32位…一.说明
本篇博客是基于考研之计算机组成原理中的程序机器级代码表示进行学习的并不是从汇编语言这一门单独的课程来学习的涉及的汇编语言知识多是帮助你学习考研之计算机组成原理中对应的考点。
二.相关寄存器
1.相关寄存器
X86处理器中有8个32位的通用寄存器各寄存器及说明
名称说明作用EAX累加器什么数据都可以存EBX基地址寄存器什么数据都可以存ECX计数寄存器什么数据都可以存EDX数据寄存器什么数据都可以存ESI变址寄存器用于线性表、字符串的处理EDI变址寄存器用于线性表、字符串的处理EBP堆栈基指针用于实现函数调用ESP堆栈顶指针用于实现函数调用
注意上面四个寄存器的使用非常灵活可以只使用它的16位甚至只使用它的8位而后面四个寄存器则比较呆只能单独一起使用32位。
单独使用前4个寄存器名称如下 2.读取长度
如何指明内存地址的读写长度
dword ptr //双字32bit
word ptr //单字16bit
byte ptr //字节8bit三.常用指令
1.常见算术运算指令
功能汇编指令格式注释加add d,s计算ds结果存入d减sub d,s计算d-s结果存入d乘mul d,s无符号数d*s乘积存入d除div d,s无符号数除法edxeax/s商存入eax余数存入edx取负数neg d,s将d取负数结果存入d自增inc d,s将d结果存入d自减–dec d,s将d–结果存入d乘imul d,s有符号数d*s乘积存入d除idiv d,s有符号数除法edxeax/s商存入eax余数存入edx
注意1这里面需要注意的是除法运算edx:eax是什么意思在除法运算时首先被除数要进行位扩展把32位扩展为64位再用64位的被除数除32位的除数商存入eax余数存入edx。这里面使用的隐含寻址的数据寻址方式2个寄存器32位连起来使用存储64位的被除数所以用号连接。
2.常见逻辑运算指令
功能汇编指令格式注释与add d,s将d、s逐位相与结果放回d或or d,s将d、s逐位相或结果放回d非not d将d逐位取反结果放回d异或xor d,s将d、s逐位异或结果放回d左移shl d,s将d逻辑左移s位结果放回d通常s是常量即立即数右移shr d,s将d逻辑右移s位结果放回d通常s是常量即立即数
补充这里常见的逻辑运算和算术运算如果你不了解可以查看逻辑与算术运算
3.补充指令
功能数据传送指令格式mov ds注释将第二个操作数复制到第一个操作数但不能用于直接从内存复制到内存
四.汇编格式
使用不同的编程工具开发程序时用到的汇编程序也不同一般有两种不同的汇编格式ATT格式和Intel格式。
我们之前学的X86汇编语言都是Intel格式。 两种格式需要注意的点都在这里了。
五.选择语句的机器级表示
1.无条件转移指令-jmp
jmp 地址 PC无条件转移至地址jmp 128 地址可以用常数给出jmp [999] 地址可以来自于主存jmp eax 地址可以来自于寄存器jmp NEXT 地址可以用“标号”锚定
2.有条件转移指令 需要注意的是因为是有条件注意所以它经常和cmp比较指令一起组合使用
例如
cmp eax,ebx #比较寄存器eax和ebx里的值
jg NEXT #若eax ebx则跳转到NEXT:3.C语言程序编译成汇编程序
示例如下 六.循环语句机器级表示
循环语句我们非常熟悉了也知道他们之间可以互相转换。
例如
int result 0;
for(int i0;i100i){result i;
}可以转化为while循环
int i1;
int result 0;
while(i100){
result i;
i;
}那么转化的汇编语言程序是什么呢
mov eax 0 #用eax保存result, 初值为0
mov edx, 1 #用edx保存i 初始值为1
cmp edx,100 #比较i和100
jg L2 #若i100转跳到L2执行
L1 : #循环主体
add eax,edx #实现result i
inc edx #inc自增指令实现i
cmp edx,100 #i和100
jleL1 #若i100转跳到L1执行
L2 : #跳出循环主体
这里补充介绍一条命令
loop NEXTdec ecx
cmp ecx,0
jne NEXT理论上能用loop指令实现的功能也一定能用条件转移实现。
补充本篇博客仅仅针对于考研之计算机组成原理指令系统这一章节仅作了解即可。