我正在编写以下程序的代码,
计算用户按下的空格数。如果输入被按下则中断。
.MODEL SMALL
.STACK 100H
.DATA
TEXT DB "Enter Character"
.CODE
MOV AX,9
MOV DX,TEXT
INT 21H
BACK:
INT21H
CMP AL, " "
JE INCREMENT
CMP AL, "\n"
JE OUT
JMP BACK
INCREMENT:
INC ; which register do I use here? I feel that I am out of registers
LOOP BACK
OUT:
;display the count
在上面的代码中,我已经标记了我感觉我没有剩余寄存器可以使用的区域。我必须在代码中使用AX
,AL
,DX
,DL
个寄存器。我可以使用哪个其他寄存器来存储计数?请帮助,谢谢。
答案 0 :(得分:2)
您可以使用以下通用寄存器:
AX
(AH
是AX
的8个最高有效位,AL
是AX
的8个最低有效位。
BX
(BH
是BX
的8个MSB,BL
是BX
的8个LSB)
CX
(CH
是CX
的8个MSB,CL
是CX
的8个LSB)
DX
(DH
是DX
的8个MSB,DL
是DX
的8个LSB)
BP
(个别一半不能直接进入)
SI
(个别一半不能直接进入)
DI
(个别一半不能直接访问)
顺便说一句,您必须在AH
之前将int 21H
设置为1,从键盘中将字符读入AL
。
如果要使用int 21H
函数9打印文本字符串,则必须以美元符号结尾。
另外,Enter的代码是13('\ r'),而不是10('\ n')。
还有一些问题:
DS
设置为指向数据段。请参阅您的书籍或说明或汇编程序文档,了解如何执行此操作。 ES
应该设置为相同的值。