include 'emu8086.inc'
#make_com#
org 100h
s1 dw 50,60,70,80,90,100,120,130,140,160,170,190,190,220,250,270,300
MOV SI,0
MOV CX,16
s2:
MOV AX,s1[SI]
s3:
INC SI
CMP AX,100
JBE s4
JA s5
s4:
PRINTf AX
JMP s3
s5:
CMP AX,200
JB s6
JA s7
s6:
PRINTf AX
JMP s3
s7:
PRINTf AX
JMP s3
END
;printf AX doesn't work and i want to print the contents of AX
3条答案
按热度按时间oprakyz71#
;printf AX不工作,我想打印AX的内容
你还没有向我们展示 PRINTf 应该做什么。所以你所有的
PRINTf AX
宏调用都可以。但是你的程序确实有两个错误,阻止它正确执行。
1.一个.COM程序从顶部开始执行,但那是你放置数据的地方。这是不能执行的!所以要么把数据放在代码下面,要么跳过数据。
1.您使用的数据是字长的,因此在迭代数据时需要向SI寄存器加2。
xdyibdwo2#
您可以按原样显示AX,但您会在屏幕上看到奇怪的字符。将二进制(AX)转换为字符串的过程是必要的。下一个代码将数字放入AX,将AX转换为字符串,并显示字符串。您可以在未来的程序中使用过程number 2string。在EMU 8086中复制粘贴下一个代码并运行它:
再解释一下:对于您将来的程序,过程number 2string需要名为“str”的数据段中的变量。正如您在代码中看到的,“str”的长度为6,因为AX可以容纳5位或更少的数字,并且,如果您想要显示它,字符串需要'$'符号,这就是长度为6的原因。number 2string的参数必须放置在AX上。当然,您可以更改变量名(str)和使用的寄存器(AX)。
twh00eeo3#
这将打印所有寄存器到屏幕上。希望这是你正在寻找的。你可以保存为宏或全局,并随时调用它打印所有寄存器。