两个程序的奇怪问题??

seaman117 2004-10-17 09:29:36
第一个功能:在以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了,但是我定义的有这个值啊!


那个老大请不惜指正,十分十分感谢!!!
...全文
93 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areslee 2004-10-19
  • 打赏
  • 举报
回复
送进去查表的是11H吧,进制问题
seaman117 2004-10-19
  • 打赏
  • 举报
回复
哦,原来如此,哎,估计那天头有点大,居然是这种错误

佩服佩服,给分给分!
seaman117 2004-10-18
  • 打赏
  • 举报
回复
自己抬一下
seaman117 2004-10-18
  • 打赏
  • 举报
回复
to Areslee(懒虫易水) :
我是这样写的啊,都减去30后查表也就是对应的
30 --------- 39 41------ 46
00 01 02 03 04--- 09 0A 0B 0C 0D 0E 0F
前面数字都是对的,就是到A开头后,送进去al的也是11,但是查表出来的确是0h,而不是0Ah,就是这里非常奇怪!!!
Areslee 2004-10-18
  • 打赏
  • 举报
回复
0-9的ASCII码是30H-39H
A-F的ASCII码是41H-46H(大写) 61H-66H(小写)
seaman117 2004-10-18
  • 打赏
  • 举报
回复
第一个问题已经解决了,关键是第二个问题!!
seaman117 2004-10-18
  • 打赏
  • 举报
回复
走了,在抬一下
loushubin 2004-10-17
  • 打赏
  • 举报
回复
兄弟,别急,慢慢来。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧