2016-11-25 61 views
1

我已經編寫了這段代碼,由於某種原因,它只打印部分句子,它也不會將DL中的數字分配給字符串,而是打印出「心臟」。在8086程序集中打印一句話

我檢查了TurboDebugger,除了那部分,所有東西都完美無缺。

我添加相關的部分:

.MODEL SMALL 
.STACK 100h 
.DATA 
    ARR1 DW 333,20989,3456,2082 
    ARR2 DW 333,15,5436,2082 
    ARR3 DW ? 
    ANSWER DB 'The last digit is: X',13,10,'$' 
    TEN DW 10 
.CODE 
    MOV AX,@DATA ; DS can be written to only through a register 
    MOV DS,AX  ; Set DS to point to data segment 
    MAX: 
    CMP AX,10 
    ;MAX<10 
    JL LESSTHAN10 
    ;MAX>10 
    MOV DX,0 
    DIV TEN 
    MOV ANSWER[19],DL 
    JMP PRINTANSWER 
    PRINTANSWER: 
    MOV AH,9    ; Set print option for int 21h 
    MOV DX,OFFSET ANSWER ; Set DS:DX to point to answerString 
    INT 21h    ; Print DisplayString 

這裏是我的是組裝本的嘗試的截圖:

screen print

+0

您是否介意在您的聲明中詳細說明「我檢查了TurboDebugger,除此之外,所有內容都完美無缺。」 – CodeWarrior

+0

@CodeWarrior所有我需要的代碼,以使計算好去和DL拿到了3位像我需要的,但,當我到指定的答案串它賦予「心臟」,而不是3,它也不會打印字符串的開頭,就像我指定的那樣。 –

+3

嘗試='加分升,48' –

回答

2

由於某種原因,只打印了一句

的一部分

這是因爲你當您在數組ARR3中寫入內容時,將覆蓋消息中的前6個字符ANSWER
確保通過書面形式提供這3陣列足夠的空間:

ARR3 DW 4 dup (?) 
ANSWER DB 'The last digit is: X',13,10,'$' 

它也不會從DL分配數量的串並打印「心臟」來代替。

除法10的餘數給出了一個從0到9的數字,您要打印爲字符。你需要先把它變成一個角色。這是通過添加48來完成的。這樣做的一種優雅的方式是通過編寫add dl, "0"

DIV TEN 
add dl, "0" 
MOV ANSWER[19],DL