网站开发合同适用印花税,如何加强省市级门户网站的建设,wordpress设置手机浏览,网站一直显示建设中计算FFFF:0 ~ FFFF:B单元中数据的和#xff0c;结果存储到dx中 1 分析与解决
内存单元#xff1a;字节型数据目标寄存器#xff1a;dx#xff0c;字型寄存器#xff0c;不匹配数据范围#xff1a;dx不会超#xff0c;但是dl会超#xff0c;因此必须用dx将字节型数据结果存储到dx中 1 分析与解决
内存单元字节型数据目标寄存器dx字型寄存器不匹配数据范围dx不会超但是dl会超因此必须用dx将字节型数据转换为字型数据前8位置为0利用循环和bx的增加实现寻址和累加
assume cs:codesg
codesg segmentstart:; 数据指向 ffff:0mov ax,0ffffhmov ds,axmov bx,0mov dx,0 ; 累加器置零mov cx,12 ; 设置循环次数mov ah,0 ; 高8位置零接收字节型数据s:mov al,[bx]add dx,axinc bxloop smov ax,04c00hint 21h
codesg ends
end start需要注意mov ah,0放在循环里面第一条也可以但是没有必要除非指令是乱序执行的
2 重要知识点
2.1 框架一定位数据地址
mov ax,段地址
mov ds,ax
mov 目标偏移地址2.2 框架二累加先置零
累加器在进行运算前要先置零
mov dx,02.3 框架三字节型数据转换为字型数据
mov ah,0
mov al,字节型数据这样字节型数据就成了存储在ax中的字型数据
2.4 框架四循环结构
mov cx,循环次数
s:内容loop s2.5 框架五利用自增实现批量处理
利用循环结构实现寄存器的自增这样就可以批量处理处于连续内存的数据了。
3 结合C语言和x86-32汇编
循环的本质是指令的跳转例如上面的loop本质是修改IP的值使得CS:IP指向对应的指令8086使用cx的值来控制循环次数。
看一下C语言的循环
int i 0;
while (i 10) {i;
}对应的x86-32汇编指令 1: int i 0;
00FE1728 mov dword ptr [ebp-8],0 2: while (i 10) {
00FE172F cmp dword ptr [ebp-8],0Ah
00FE1733 jge 00FE1740 3: i;
00FE1735 mov eax,dword ptr [ebp-8]
00FE1738 add eax,1
00FE173B mov dword ptr [ebp-8],eax 4: }
00FE173E jmp 00FE172F 依然秉承着原有的思想循环的本质是跳转循环次数靠条件控制。
这里简单解释 cmp是比较指令compare比较两个操作数的大小得到的结果它不改变操作数但会影响标志寄存器的值。
jge是转移指令用于修改EIP的值用于指令的跳转它常与cmp一起出现它根据标志位的情况判断是否执行跳转。
jmp是无条件跳转指令遇到就立即跳转。
这里没有阐明技术细节只是宏观认知以下是while循环的图示