組合語言:. 將DX暫存器中的二進位制數(3 F 2 E H)以十六進位制數形式顯示在螢幕上;然後換行從KU丶雨 2010-01-04

第一題:

CSEG SEGMENT

assume cs:CSEG

MAIN PROC FAR ;主程式入口

mov dx,3f2eh

mov bx,dx

mov cx,4 ;= 這 =

x0: rol bx,1 ;= 些 =

rol bx,1 ;= 是=

rol bx,1 ;=輸=

rol bx,1 ;=出=

mov dl,bl ;

and dl,0fh ;

cmp dl,0ah ;

jl x1 ;

add dl,37h ;

jmp x2 ;

x1: add dl,30h ;

x2: mov ah,02h ;

int 21h ;

loop x0 ;

mov dl,0ah ;換行

int 21h

mov dl,31h ;輸出16

int 21h

mov dl,36h

int 21h

;按任意鍵退出

mov ah,1

int 21h

mov ax, 4c00h ;程式結束,返回到作業系統系統

int 21h

MAIN ENDP

CSEG ENDS

END MAIN

第二題:

CSEG SEGMENT

assume cs:CSEG

MAIN PROC FAR ;主程式入口

mov dx,3f2eh

mov ax,dx

mov bx,0

mov cx,16

x4: ror ax,1

jnc x3

add bx,1

x3: loop x4

mov ax,bx

daa

mov bx,ax

mov cx,4

x5: rol bx,1

rol bx,1

rol bx,1

rol bx,1

mov dl,bl

and dl,0fh

cmp dl,0ah

jl x6

add dl,37h

jmp x7

x6: add dl,30h

x7: mov ah,02h

int 21h

loop x5

;此處新增主程式程式碼

;按任意鍵退出

mov ah,1

int 21h

mov ax, 4c00h ;程式結束,返回到作業系統系統

int 21h

MAIN ENDP

CSEG ENDS

END MAIN

有疑問可以百度HI我= =

組合語言:. 將DX暫存器中的二進位制數(3 F 2 E H)以十六進位制數形式顯示在螢幕上;然後換行從做而論道 2010-01-02

1。先顯示3F2EH,再另起一行顯示16? 如下格式?

3F2EH

16

2。個數還是用十六進位制數顯示?

組合語言:. 將DX暫存器中的二進位制數(3 F 2 E H)以十六進位制數形式顯示在螢幕上;然後換行從new妞寧 2010-01-03

1的個數用十進位制表示的,程式如下:

;7。asm

data segment

string  db   3 dup(0),‘$’   ;儲存轉換後的餘數,初始化為30h,餘

;數直接加到對應單元,轉化為ascii碼

data ends

code  segment

assume  cs:code,ds:data

start:

mov ax,data

mov ds,ax

mov dx , 3F2Eh   ;預置dx要顯示的值

push dx

mov bx,dx

mov cl,4        ;移位指令中用於指定移位次數的值

mov dh , 0       ;dh用於記錄迴圈次數,正計數

again: rol bx , cl      ;迴圈移位指令,完成顯示後bx值不變

;從高位開始顯示

mov dl , bl      ;當前要顯示的4位移至最低位上

and dl , 0fh     ;清除高4位

cmp dl , 0ah     ;若是0~9,則直接加30H顯示;

;若是A~F,則另外再加7(41H-0AH=30H+7)

jb  disp

add dl , 7

disp:  add dl , 30h     ;不能使用OR DL,30H,是因為數值可能為A~F

mov ah , 2

int 21h

inc dh           ;記錄迴圈次數,達到4次,即結束。

cmp dh , 4

jnz again

mov ah , 02h ;回車換行

mov dl , 0ah

int 21h

mov ah , 02h

mov dl , 0dh

int 21h

mov ah,02h

mov dl,‘1’

int 21h

mov dl,‘6’

int 21h

pop dx

xor bl,bl

next1:   and dx,dx;若dx為0,移位結束

jz  next2

shl dx,1

adc bl,0

jmp  next1

next2:next2: mov  bh,0

mov  cx , 10              ;將bl中資料轉換成十進位制輸出,cx為數制轉換的基數

lea  si , string+4        ;si指標指向緩衝區末尾,依次減量,使餘數倒序排列

mov  ax , bx            ;要轉換的資料保存於ax

next3: mov  dx , 0               ;除法轉換,要使用32位被除數,dx為無符號數的0擴充套件,每次除法都要進行擴充套件

div  cx                   ;除法後,ax為商,準備下次除法;dx為餘數,值為0~9,

;dl可以保存於string中,用於顯示

add  dl , 30h             ;將餘數轉換為字元,保存於si指定的緩衝區中

mov  [si] , dl

dec  si                   ;指標修改,準備存放下一個餘數

cmp  ax , 0               ;直到商為0,轉換結束

jz   over

jmp  next3

over:  mov  dx , si              ;使用09號DOS功能呼叫,顯示轉換後的字串

inc  dx

mov  ah , 09h

int  21h

mov ax , 4c00h

int 21h

code  ends

end start

/////結果如下:16後面的10是1的個數

J:\masm611>7

3F2E

1610

組合語言:. 將DX暫存器中的二進位制數(3 F 2 E H)以十六進位制數形式顯示在螢幕上;然後換行從