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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

汇编语言 乘法和除法指令

發布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言 乘法和除法指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

除法指令

  • DVI無符號數除法指令

  • 指令格式:DIV 源

  • 指令功能:對兩個無符號二進制數進行除法操作。源操作數可以是字或字節。

  • 如果源操作數為字節,16位被除數必須放在AX中,8位除數為源操作數,它可以是寄存器或存儲單元。相除之后,8位商在AL中,余數在AH中。即

    AL ← AX/源(字節)的商
    AH ← AX/源(字節)的余數

  • 要是被除數只有8位,必須把它放在AL中,并將AH清0,然后相除。

  • 如果源操作數為字,32位被除數在DX、AX中,其中,DX為高位字,16位除數作源操作數,它可以是寄存器或存儲單元。相除之后,AX中存16位商,DX中存16位余數。即

    AX ← (DX, AX)/源(字)的商
    DX ← (DX,AX)/源(字)的余數

  • 要是被除數只有16位,除數也是16位,則必須將16位被除數送到AX中,再將DX寄存器清0,然后相除。

  • 與被除數和除數一樣,商和余數也都為無符號數。DIV指令執行后,所有標志均無定義。

; 以下程序實現 1001 ÷ 100 的結果 assume cs:code, ds:data, ss:stackdata segmentdb 256 dup(0) data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov ax, 1001mov bl, 100div blmov ax, 4C00Hint 21 code endsend start

代碼執行結果:

; 以下程序實現 100001 ÷ 100 的結果 assume cs:code, ds:data, ss:stackdata segmentdd 100001dw 1db 1 data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov ax, datamov ds, axmov ax, ds:[0]mov dx, ds:[2]mov bx, 100div bxmov ax, 4C00Hint 21 code endsend start

代碼執行結果:

; 以下程序使用 word ptr 實現 1232131 ÷ 100 的結果 assume cs:code, ds:data, ss:stackdata segmentdd 1232131 ; dd 占用4個字節dw 100 ; dw 占用 2個字節db 1 ; db 占用一個字節 data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov ax, datamov ds, axmov ax, ds:[0]mov dx, ds:[2]div word ptr ds:[4]mov ax, 4C00Hint 21 code endsend start

總結:

  • 除數:8bit或16bit 存在內存單元中或者寄存器中

  • 被除數:存放在AX或者 AX和DX中
    如果除數為8bit,被除數則為16bit,存放在AX中
    如果除數為16bit,被除數則為32bit,AX存放低16bit,DX存放高16bit

  • 結果:如果除數為8bit,則AL 存商,AH存放余數
    如果除數為16bit,則AX存放商,DX存放余數


  • 乘法指令

    MUL 無符號數乘法指令

    • 指令格式:NUL 源
    • 指令功能:把源操作數和累加器中的數都當成無符號數,然后將兩數相乘,源操作數可以是字節或字。
    • 如果源操作數是一個字節,它與累加器AL中的內容相乘,乘積為雙倍長的16位數,高8位送到AH,低8位送到AL。即
      • AX ← AL * 源
    • 如果源操作數是一個字,則它與累加器AX的內容相乘,結果為32位數,高位字放在DX寄存器中,低位字放在AX寄存器中。即
      • (DX,AX) ← AX * 源
    • 乘法指令中,源操作數可以是寄存器,也可以是存儲單元,但不能是立即數。當源操作數是存儲單元時,必須在操作數前加BYTE 或 WORD 說明是字節還是字。
    ; 以下程序實現 200 * 29 的結果 assume cs:code, ds:data, ss:stackdata segmentdb 256 dup(0) data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov al, 200mov bl, 29mul blmov ax, 4C00Hint 21Hcode endsend start


    ; 以下程序實現 200 * 50 的結果 assume cs:code, ds:data, ss:stackdata segmentdb 50 data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov bx, datamov ds, bxmov al, 200mul byte ptr ds:[0]mov ax, 4C00Hint 21Hcode endsend start

    ; 以下程序實現 200 * 12345 的結果 assume cs:code, ds:data, ss:stackdata segmentdb 256 dup(0) data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov bx, datamov ds, bxmov ax, 200mov bx, 12345mul bxmov ax, 4C00Hint 21Hcode endsend start


    ; 以下程序實現 54321 * 200 的結果 assume cs:code, ds:data, ss:stackdata segmentdw 54321 data endsstack segment stackdb 128 dup(0) stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128mov bx, datamov ds, bxmov ax, 200mul word ptr ds:[0]mov ax, 4C00Hint 21Hcode ends end start


    總結

    以上是生活随笔為你收集整理的汇编语言 乘法和除法指令的全部內容,希望文章能夠幫你解決所遇到的問題。

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