【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
計算FFFF:0 ~ FFFF:B單元中數(shù)據(jù)的和,結(jié)果存儲到dx中
1 分析與解決
需要注意,mov ah,0放在循環(huán)里面第一條也可以,但是沒有必要!(除非指令是亂序執(zhí)行的)
2 重要知識點
2.1 框架一:定位數(shù)據(jù)地址
mov ax,段地址 mov ds,ax mov 目標,偏移地址2.2 框架二:累加先置零
累加器在進行運算前,要先置零
mov dx,02.3 框架三:字節(jié)型數(shù)據(jù)轉(zhuǎn)換為字型數(shù)據(jù)
mov ah,0 mov al,字節(jié)型數(shù)據(jù)這樣,字節(jié)型數(shù)據(jù),就成了存儲在ax中的字型數(shù)據(jù)
2.4 框架四:循環(huán)結(jié)構(gòu)
mov cx,循環(huán)次數(shù) s:<內(nèi)容>loop s2.5 框架五:利用自增實現(xiàn)批量處理
利用循環(huán)結(jié)構(gòu)實現(xiàn)寄存器的自增,這樣就可以批量處理處于連續(xù)內(nèi)存的數(shù)據(jù)了。
3 結(jié)合C語言和x86-32匯編
循環(huán)的本質(zhì),是指令的跳轉(zhuǎn),例如上面的loop,本質(zhì)是修改IP的值,使得CS:IP指向?qū)?yīng)的指令,8086使用cx的值來控制循環(huán)次數(shù)。
看一下C語言的循環(huán)
int i = 0; while (i < 10) {i++; }對應(yīng)的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依然秉承著原有的思想:循環(huán)的本質(zhì)是跳轉(zhuǎn),循環(huán)次數(shù)靠條件控制。
這里簡單解釋:
cmp是比較指令,compare,比較兩個操作數(shù)的大小,得到的結(jié)果,它不改變操作數(shù),但會影響標志寄存器的值。
jge是轉(zhuǎn)移指令,用于修改EIP的值,用于指令的跳轉(zhuǎn),它常與cmp一起出現(xiàn),它根據(jù)標志位的情況,判斷是否執(zhí)行跳轉(zhuǎn)。
jmp是無條件跳轉(zhuǎn)指令,遇到就立即跳轉(zhuǎn)。
這里沒有闡明技術(shù)細節(jié),只是宏觀認知,以下是while循環(huán)的圖示:
總結(jié)
以上是生活随笔為你收集整理的【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干细胞治疗无精子症
- 下一篇: 【汇编语言】8086、x86-32和C语