日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)

發布時間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

計算FFFF:0 ~ FFFF:B單元中數據的和,結果存儲到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,0

    2.3 框架三:字節型數據轉換為字型數據

    mov ah,0 mov al,字節型數據

    這樣,字節型數據,就成了存儲在ax中的字型數據

    2.4 框架四:循環結構

    mov cx,循環次數 s:<內容>loop s

    2.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节学习笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。