两个程序的奇怪问题??
第一个功能:在以ENGLISH为首址的字节存贮区中,顺序存放着100名学生的英语考试成绩,请统计其中60分以下的学生人数→DX,如DX为0则显示“GOOD!”,否则显示“POOR!”。
printf macro info
lea dx,info
mov ah,9
int 21h
endm
stack segment stack
db 200 dup(0)
stack ends
data segment
english db 60d,70d,84d,81d,65d,94d,75d,62d,88d,94d
;english db 56d,70d,84d,56d,43d,94d,75d,62d,88d,94d
pass db 0dh,0ah,'All score over 60, good! $'
nopass db 0dh,0ah,'Have some score blow 60, poor! $'
data ends
code segment
assume ds:data,cs:code,ss:stack
start: mov ax,data
mov ds,ax
mov bx,0
mov cx,10
lea si,english
mov al,60d
next:mov bl,[si]
cmp bl,al
jb adddx
inc si
loop next
jmp checkdx
adddx: inc dx
inc si
loop next
checkdx:cmp dx,0h
jbe good
printf nopass
jmp exit
good:printf pass
exit: mov ah,4ch
int 21h
code ends
end start
在td里调试运行正常,但运行程序确显示Have some score blow 60, poor!明明已经跳转出来了的
第二个功能:从键盘输入一个两位的十六进制ASCII码,如为合法的ASCII码,则紧跟其后显示该ASCII码所对应的字符;如为非法数,则显示错误提示;如输入为回车,则结束程序的执行
prints macro info
lea dx,info
mov ah,9
int 21h
endm
getchr macro info
lea dx,info
mov ah,10
int 21h
endm
printb macro info
mov dl,info
mov ah,2
int 21h
endm
check macro info
mov al,info
cmp al,0
jb error
cmp al,46h
ja error
endm
searchtable macro info
mov cl,info
sub cl,30h
mov al,cl
mov bx,offset indextable
xlat indextable
endm
stack segment stack
db 200 dup(0)
stack ends
data segment
inputbuff db 4
db 4 dup(0)
inputerror db 0ah,0dh,'Input error!! $'
inputinfo db 0ah,0dh,'ASCII code:$'
outputinfo db 0ah,0dh,'Character is:$'
indextable db 00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
data ends
code segment
assume ds:data,cs:code,ss:stack
start: mov ax,data
mov ds,ax
next: prints inputinfo
getchr inputbuff
lea si,inputbuff
cmp [si+1],byte ptr 0
jz exit
mov dh,[si+2]
check dh
searchtable dh
mov dh,al
mov dl,[si+3]
check dl
searchtable dl
mov dl,al
mov cl,4
shl dh,cl
or dl,dh
mov cl,dl
prints outputinfo
printb cl
jmp next
error: prints inputerror
jmp next
exit: mov ah,4ch
int 21h
code ends
end start
当输入的是A0-FF的ascii码是都显示不正确,主要是在查表的时al都是赋值成0了,但是我定义的有这个值啊!
那个老大请不惜指正,十分十分感谢!!!