2015-04-06 92 views
1

我的代碼應該打印出一個十進制數,但它不會,我不知道爲什麼。打印出十進制數

我只是一個初學者,我已經閱讀了很多建議,但我無法解決這個問題。感謝您的反饋! (打印數爲COUNT

 printout proc 
xor dl, dl 
mov dl, OFFSET COUNT 
xor bx,bx 
mov bh, 0ah 
mov ax,dx 
div bh 
mov bh,ah 
mov bl,al 
xor dx,dx 
mov dl,bl 
add dx,’0′ 
mov ah,02h 
int 21h 
xor dx,dx 
mov dl,bh 
add dx,’0′ 
mov ah,02h 
int 21h 
ret 
endp 
+0

學習使用調試器和單步執行代碼。此外,如果您希望其他人提供幫助,請花時間評論您的代碼,並提供比「不可勝任」更好的問題描述。另見[問]。 – Jester

回答

2

要閱讀COUNT的值或者使用mov dl,byte [COUNT]mov dl,COUNT
這取決於您正在使用的彙編程序。

您還應該使用xor dh,dh而不是xor dl,dl

您可以正確處理的最大數量是99.

您可以簡化代碼。

xor ah, ah 
mov al, COUNT 
mov bh, 0ah 
div bh 
mov bx,ax 
mov dl,bl 
add dl,’0′ 
mov ah,02h 
int 21h 
mov dl,bh 
add dl,’0′ 
mov ah,02h 
int 21h 
ret 
0

首先,您必須將數字轉換爲字符串,然後才能「打印出」。下一個代碼是用EMU8086製作的,並說明了如何做(註釋會幫助你理解):

.stack 100h 
.data 

num dw 10382  ;ANY NUMBER. 
str db 7 dup('$') ;STRING TO STORE NUMBER. 

.code   
;INITIALIZE DATA SEGMENT. 
    mov ax, @data 
    mov ds, ax 

;CONVERT "NUM" TO STRING. RESULT COMES BACK IN "STR". 
    mov ax, num 
    call number2string 

;DISPLAY NUMBER. 
    mov ah, 9 
    mov dx, offset str ;NUMBER CONVERTED TO STRING. 
    int 21h 

;STOP UNTIL USER PRESS ANY KEY. 
    mov ah,7 
    int 21h 

;FINISH THE PROGRAM PROPERLY. 
    mov ax, 4c00h 
    int 21h   

;------------------------------------------ 

;NUMBER TO CONVERT MUST ENTER IN AX. 
;ALGORITHM : EXTRACT DIGITS ONE BY ONE, STORE 
;THEM IN STACK, THEN EXTRACT THEM IN REVERSE 
;ORDER TO CONSTRUCT STRING. 

proc number2string 
    mov bx, 10 ;DIGITS ARE EXTRACTED DIVIDING BY 10. 
    mov cx, 0 ;COUNTER FOR EXTRACTED DIGITS. 
cycle1:  
    mov dx, 0 ;NECESSARY TO DIVIDE BY BX. 
    div bx ;DX:AX/10 = AX:QUOTIENT DX:REMAINDER. 
    push dx ;PRESERVE DIGIT EXTRACTED FOR LATER. 
    inc cx ;INCREASE COUNTER FOR EVERY DIGIT EXTRACTED. 
    cmp ax, 0 ;IF NUMBER IS 
    jne cycle1 ;NOT ZERO, LOOP. 
;NOW RETRIEVE PUSHED DIGITS. 
    mov si, offset str 
cycle2: 
    pop dx   
    add dl, 48 ;CONVERT DIGIT TO CHARACTER. 
    mov [ si ], dl 
    inc si 
    loop cycle2 

    ret 
endp