大家帮我调试一下程序,紧急,谢谢!
我刚学汇编,不太懂这里的编程机制。做了一个实验,没有调试成功,结果不对,请大家帮我检查一下,看看那里有问题,谢谢~~
;用查表法编程实现:y=x^2(x:0-15),求x由键盘输入,y及其值由CRT显示,并保存x、y值。
data segment
table db 0,1,4,9,16,25,36,49,64, ;表的值
81,100,121,144,169,196,225
x db ?
y db ?
buff db 2 ;定义缓冲区(最多要2字节)
db ?
db 2 dup(0)
mess0 db 'Please input the number of x:$'
mess1 db 'The result:y= $'
data ends
;
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
mov dx,offset mess0 ;输出提示,等待输入
call dispmess
mov dx,offset buff
mov ah,0ah ;输入
int 21h
call newline
mov si,offset buff+2
mov al,[si]
sub al,30h ;ASCII转换为十六进制
mov bl,[si+1]
sub bl,30h
mov dl,10
mul dl
add al,bl
mov x,al ;接收得到的值给x
mov ah,0
mov bx,ax
mov al,table[bx] ;找出结果值
mov y,al ;存y
mov dx,offset mess1
call dispmess ;显示结果
call dispal
call newline
;
mov ah,4ch
int 21h
;
dispmess proc
mov ah,9
int 21h
ret
dispmess endp
;
newline proc
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
newline endp
;用十进制形式显示8位二进制数
dispal proc
mov cx,3 ;一个字节无符号数最大为2*225,转换成3位十进制数
mov dl,10
disp1: div dl
xchg ah,al ;使al=余数,ah=商
add al,30h ;转换成ASCII码
mov bl,al
xor bh,bh
push bx ;压栈
xchg ah,al
mov ah,0
loop disp1
mov cx,3
disp2: pop dx ;弹出一位
mov ah,2
int 21h
loop disp2
dispal endp
;
code ends
end start
好象报告溢出,不知怎么回事
问题点数:20、回复次数:6Top
1 楼ahalf(ahalf)回复于 2002-11-11 16:08:58 得分 5
分号引起的,用半角Top
2 楼shihong8488(mianbao)回复于 2002-11-11 16:15:07 得分 0
不是,我用的就是半角,我用edit编的,这个没有问题的,关键是里面处理Top
3 楼shihong8488(mianbao)回复于 2002-11-11 18:09:32 得分 0
ahalf(ahalf) :我先用edit编的,注解,是我后来用记事本打开的,可能用了全角,不过与我运行的程序无关。调试时可以帮我去掉再调,谢谢大家!!~~Top
4 楼wzwlin()回复于 2002-11-11 22:33:35 得分 5
谢谢各位高手Top
5 楼neptune_hay(葫芦头)回复于 2002-11-11 23:37:09 得分 10
。。。调试成功,但你的程序有问题,先做个标记Top
6 楼shihong8488(mianbao)回复于 2002-11-15 16:13:52 得分 0
谢谢,程序bug我已改出,不过,同志们的效率也太差了,一个问题半天没人应,太郁闷了,就给你们几个人分吧,别人连up没有,太伤心了~~Top




