【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
生活随笔
收集整理的這篇文章主要介紹了
【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
計算FFFF:0 ~ FFFF:B單元中數據的和,結果存儲到dx中
1 分析與解決
需要注意,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循環的圖示:
總結
以上是生活随笔為你收集整理的【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干细胞治疗无精子症
- 下一篇: 【汇编语言】8086、x86-32和C语