汇编实验出现错误啦

ak520ak 2014-10-22 10:26:52
datarea segment
mess1 db 'stock number?',13,10,'$'
stoknin label byte
max db 3
act db ?
stokn db 3 dup(?)
stoktab db '05',' Excavators '
db '08',' F Lifters '
db '09',' Presses '
db '12',' Valves '
db '23',' Processors '
db '27',' Pumps '
descrn db 14 dup(20h),13,10,'$'
mess db 'Not in table!','$'
datarea ends
code segment
assume cs:code,ds:datarea,es:datarea
main proc far
push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax

mov es,ax
start: lea dx,mess1
mov ah,09
int 21h
lea dx,stoknin
mov ah,0ah
int 21h
cmp act,0
Je exit
Mov al,stokn
Mov ah,mess1
Mov cx,06
Lea si,stoktab
a20: cmp ax,word ptr[si]
je a30
add si,14
loop a20
lea dx,mess
mov ah,09h
int 21h
jmp exit
a30: mov cx,07
lea di,descrn
rep movsw
lea dx,descrn
mov ah,09h
int 21h
jmp start
exit: ret
main endp
code ends
end main

我这段代码里面 为什么后面输入stoktab里面的几个编号都显示Not in table
是哪里错了?
用的编译工具是MASM 2012.5的
求各位大神解答
...全文
184 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2014-10-23
  • 打赏
  • 举报
回复
1. 取输入内容到 ax 错误,那两个指令应该是 mov ax, word ptr stokn;你的一个 al 一个 ah 的赋值,什么意思呢?
2. 比较时指向下一项用的是 add si, 14,但是,你的 stoktb 里的那几组数据,并不是都是 14 字节的长度,必然会比较了错误的数据,所以应该将不足的项补齐到 14 字节。

21,499

社区成员

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

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