在8086组装中打印半句

时间:2016-11-25 19:45:32

标签: assembly x86-16 tasm

我已经编写了这段代码,由于某些原因,它只会打印部分句子而且也没有将DL中的数字分配给字符串并打印出一个' heart&# #39;代替。

我检查了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

1 个答案:

答案 0 :(得分:2)

  

由于某种原因它只打印部分句子

这是因为当您在数组 ARR3 中写入内容时,您正在覆盖消息 ANSWER 中的前6个字符。
确保通过编写以下内容为第3个阵列提供足够的空间:

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

它也没有将DL中的数字分配给字符串并打印出一个“心脏”字样&#39;代替。

除以10的除数给出了一个从0到9的数字,你想要打印成一个字符。你需要先将它变成一个角色。这是通过向其添加48来完成的。这样做的一种优雅方式是编写add dl, "0"

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