[匯編語言]-第八章 div指令,偽指令dd,dup


1- div除法指令

(1) 除數: 有8位和16位兩種,在一個寄存器或內存單元中.

(2) 被除數: 默認放在AX和DX或AX中

  除數為8位, 被除數為16位, 默認在AX中存放.

  除數為16位, 被除數為32位, 在DX或AX中存放. AX存放低16位,DX存放高16位.

(3) 結果

  除數為8位, 則AL存儲除法操作的商, AH存放余數

  除數為16為, 則AX存儲除法操作的商, DX存放余數

2- 格式如下

  div reg

  div 內存單元

 

  div byte ptr ds:[0]

  含義為:(al) = (ax)/((ds)*16+0)的商

      (ah) = (ax)/((ds)*16+0)的余數

  div word ptr es:[0]

  含義為:(ax) = [(dx)*10000H+(ax)]/((es)*16+0)的商  

      (dx) = [(dx)*10000H+(ax)]/((es)*16+0)的余數

  div byte ptr [bx + si + 8]

  含義為:(al) = (ax)/((ds)*16+(bx)+(si)+8)的商

      (ah) = (ax)/((ds)*16+(bx)+(si)+8)的余數

編程:利用除法指令計算 100001/100 (16位除法)

分析:100001大於65535,所以只能用dx和ax兩個寄存器聯合存放100001,也就是要進行16位除法,除數100小於255,可以在一個8位寄存器中存放,但是因為被除數是32位的,除數必須是16位,所以用16位的寄存器來存放除數100.

因為要分別為dx和ax賦100001的高16位和低16位,所以應先將100001表示為16進制形式.186A1H.

100表示為16進制形式64H,用bx存儲

(ax) = [(dx)*10000H+(ax)]/(bx)的商 03E8H

(dx) = [(dx)*10000H+(ax)]/(bx)的余數 0001H

編程:利用除法指令計算1001/100(8位的除法)

被除數可以用ax存放,除數可以用8位寄存器bl

(al)=0AH

(dx)=1H

3- 偽指令 dd

  db 字節型數據

  dw 字型數據

  dd dword (double word)雙字型數據

  data segment

    db 1    ;為01H 在data:0處, 占1個字節

    dw 1    ;為0001H 在data:1處, 占1個字

    dd 1    ;為00000001H 在data:3處, 占2個字

  data ends

 1 ;用div計算data段中第一個數據除以第二個數據后,商存放到第三個數據的存儲單元中.
 2 ;余數存儲到第四個存儲單元中.
 3 assume cs:codesg,ds:datasg
 4 datasg segment            ;儲存 0B60:0 F A1 86 01 00 64 00 00 00 00 00
 5     dd 100001
 6     dw 100
 7     dw 0
 8     dw 0
 9 datasg ends
10 codesg segment
11 start:  mov ax,datasg
12         mov ds,ax
13         mov ax,ds:[0]                ;ax存儲低16位
14         mov dx,ds:[2]                ;dx存儲高16位
15         div  word  ptr  ds:[4]       ;計算除法
16         mov ds:[6],ax                ;商存儲第3個單元
17         mov ds:[8],dx                ;余數存儲第4個單元
18     
19         mov ax,4c00h
20         int 21h
21 codesg ends
22 end start

 

4- dup 用來進行數據重復的

  db 3 dup (0) ;定義了3個字節,相當於db 0,0,0

  db 3 dup (0,1,2) ;定義了9個字節,相當於db 0,1,2,0,1,2,0,1,2

  db 3 dup ('abc','ABC') 定義了18個字節, 相當於 db 'abcABCabcABCabcABC'

  可見dup的使用格式如下:

  db 重復的次數 dup(重復的字節型數據)

  dw 重復的次數 dup(重復的字型數據)

  dd 重復的次數 dup(重復的雙字數據)

 

  定義一個容量為200個字節的棧段

  stack segment

    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

  stack ends

  stack segment

    dw 200 dup (0)

  stack ends

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM