青岛个人接网站建设,开发工具怎么用,南京营销网站建设,大型的网站建设公司目录
前提知识
案例
c的插入排序
32位汇编代码
代码分析
效果展示 前提知识
常用指令add指令 sub指令 mul乘法指令 div除法指令 inc#xff08;自增#xff09;#xff08;即#xff09; dec#xff08;自减#xff09;#xff08;即--#xff09; cmp#xf…目录
前提知识
案例
c的插入排序
32位汇编代码
代码分析
效果展示 前提知识
常用指令add指令 sub指令 mul乘法指令 div除法指令 inc自增即 dec自减即-- cmp比较 寄存器•EAX累加器 多用于存放中间运算结果 •EBX基址寄存器 在间接寻址中用于存放基地址 •ECX计数寄存器 用于在循环或串操作指令中存放循环次数或重复次数 •EDX数据寄存器 在32位乘除法运算时存放高32位数 分支结构比较指令 cmp x,y 跳转指令 jmp, jXXXja, jb, jz cmp x, y 语义 执行操作 x-y (x与y的值不变),根据操作结果改 变EFLAG相应的位。 ja loc: 若x与y是无符号数(程序员定义)且 xy,则程序跳转到地址loc处执行 jz/je loc: 若x与y是无符号数(程序员定义)且 xy,则程序跳转到地址loc处执行 jb loc: 若x与y是无符号数(程序员定义)且 xy,则程序跳转到地址loc处执行 jg loc: 若x与y是有符号数(程序员定义)且 xy,则程序跳转到地址loc处执行 jz/je loc: 若x与y是有符号数(程序员定义)且 xy,则程序跳转到地址loc处执行 jl loc: 若x与y是有符号数(程序员定义)且 xy,则程序跳转到地址loc处执行 输出输入数据移送指令mov destsrc 函数调用指令Call f 输入输出函数 ReadInt PROC uses ebx ecx edx esi 输入无 返回值 CF0 输入存在EAX CF1 输入无效EAX0 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 ;间接下标寻址,ebxisub ecx,1 ;外层循环次数again1:mov ebx,amov eax,arr[ebx*4] ;eaxtempjd: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循环将数组的元素打印出来即为有序数列 效果展示