某些十六进制值未输出

时间:2012-03-14 13:43:07

标签: assembly x86

我制作了这个程序,通过匹配它们的hexa值输出ascii字符及其颜色代码。我的问题是7-13的六角形没有出现。

.model small
.code
org 100h
s:jmp main
b dB 0h
d dB 000h
main proc


x:call color
mov ah,2
mov dl,b
int 21h
inc b
cmp b,14
jna x
int 20h

color proc
mov ah,9
mov al,''
mov bl,d
mov cx,1
int 10h
inc d
ret
color endp

main endp
end s

2 个答案:

答案 0 :(得分:1)

问题是该范围内的字符没有要显示的图像(字形),但用作控制字符,如制表符和换行符。

请参阅此表http://www.asciitable.com/

答案 1 :(得分:0)

首先,你能告诉我在哪个课程中教授哪些课程涉及编写16位x86 ASM和DOS软件中断?我觉得有些学校关心经典教学真是太棒了。 : - )

接下来,我想澄清一下你的程序在做什么:你试图展示all 16 colors in the BIOS color attribute table,对吗?你想要打印哪些角色?由于Bo Persson已经回答,您无法打印低位ASCII字符,因为它们无法打印。

您在代码中使用了2个单独的中断,我认为它们可能存在冲突。第一个是int 21h/ah = 02h:向STDOUT写char。这是一个DOS中断。第二个是int 10h/ah = 09h:在屏幕上写入字符和属性。这是一个视频中断,我认为这是你想要的。尝试依靠第二个中断。将30h(ASCII“0”)写入al--应打印不同颜色的零。