汇编基础语法和指令总结+案例(用32位汇编实现插入排序)
创始人
2024-05-29 02:49:41

目录

前提知识

案例 

c的插入排序

32位汇编代码

代码分析

效果展示


前提知识

  • 常用指令

add指令
sub指令
mul乘法指令
div除法指令
inc(自增)(即++)
dec(自减)(即--)

cmp(比较)

  • 寄存器

•EAX:累加器 多用于存放中间运算结果 •EBX:基址寄存器 在间接寻址中用于存放基地址 •ECX:计数寄存器 用于在循环或串操作指令中存放循环次数或重复次数; •EDX:数据寄存器 在32位乘除法运算时,存放高32位数
  • 分支结构
比较指令: cmp x,y 跳转指令: jmp, jXXX(ja, jb, jz) cmp x, y 语义: 执行操作 x-y (x与y的值不变),根据操作结果改 变EFLAG相应的位。 ja loc: 若x与y是无符号数(程序员定义)且 x>y,则程序跳转到地址loc处执行 jz/je loc: 若x与y是无符号数(程序员定义)且 x==y,则程序跳转到地址loc处执行 jb loc: 若x与y是无符号数(程序员定义)且 xjg loc: 若x与y是有符号数(程序员定义)且 x>y,则程序跳转到地址loc处执行 jz/je loc: 若x与y是有符号数(程序员定义)且 x==y,则程序跳转到地址loc处执行 jl loc: 若x与y是有符号数(程序员定义)且 x
  • 输出输入
数据移送指令:mov dest,src 函数调用指令:Call f 输入输出函数 ReadInt PROC uses ebx ecx edx esi 输入:无 返回值: CF=0, 输入存在EAX CF=1, 输入无效,EAX=0 WriteInt proc 输入:显示的整数存在EAX 返回值: 无
  • 基础格式
INCLUDE Irvine32.inc
.data
.code
final:
exit
main ENDP
END main

案例 

c的插入排序

void InsertSortArray ( int arr[], int n){
int arr[]={2,99,3,1,22,88,7,77,54};
for (int i = 1; i < n; i++){
int temp = arr[i];
while (i >= 0 && arr[i - 1] > temp){
arr[i] = arr[i - 1];
i--;
}
arr[i] = temp;
}
}

32位汇编代码

INCLUDE Irvine32.inc
.data
arr dd 2,99,3,1,22,88,7,77,54
arr_len dd 9
a dd 1 ;直接下标
.code
main PROCmov ecx,arr_len ;数组长度mov edx,1 ;临时数值交换区间mov ebx,1 ;间接下标寻址,ebx=isub ecx,1 ;外层循环次数again1:mov ebx,amov eax,arr[ebx*4]  ;eax=tempjd:cmp ebx,0jb L1mov edx,ebxsub edx,1mov ESI,arr[edx*4]cmp ESI,eaxjbe L1mov arr[ebx*4],ESIsub ebx,1jmp jdL1:mov arr[ebx*4],eaxadd a,1loop again1mov ebx,0again2:cmp ebx,arr_lenjae finalmov eax,arr[ebx*4]call WriteIntadd ebx,1jmp again2final:exit
main ENDP
END main

代码分析

这里通过ecx和loop控制外层循坏次数为len-1次以实现源代码中的for循环,从数组第二位开始插向前面的有序数列,这里对while中的判定条件进行取反,当不满足条件时跳出while循环,并将temp的值即为eax赋值给此时数组i下标的位置,while循环满足时依次将数组的元素后移腾出插入元素的位置,排序完成后call writenint循环将数组的元素打印出来即为有序数列

效果展示

相关内容

热门资讯

数说“新”变化丨疆电外送已破3... 来源:天山网截至3月11日,2026年新疆外送电量达308亿千瓦时,较2025年提前14天突破300...
告别沙尘天!今起西宁空气质量逐... 3月12日以来,受冷空气影响我国北方大部出现大范围沙尘天气,我省柴达木盆地、青海湖流域和东部农业区也...
特朗普:油轮“拿出点胆量”通过... (来源:航运在线)据美国福克斯新闻频道3月12日的报道,美国总统特朗普在接受该频道采访时,鼓动油轮“...
羊肉胡同:从羊市走来的古韵长巷... 羊肉胡同东起西四南大街,西至太平桥大街,全长八百二十米。它的名字自带市井烟火,源头藏着元大都的商业繁...
一周“烧掉”一艘航母!美国政府... 美国国防部代理审计长朱尔斯·赫斯特12日说,美国上周在对伊朗军事行动中花费约110亿美元。这是美国政...