请帮忙调试下一个关于ascii数转化为二进制码的汇编应用程序
有谁用《ibm pc汇编语言程序设计(第五版)》的吗
请版忙调试一下13.5的程序
一个关于ascii数转化为二进制码 的应用程序
程序输完,编译通过
执行就是不能利用显示调用 输入,输出 显示的子程序
更详细的课本注释在附件pdf 227页
title a13calc(exe) ;输入量和速率的ASCII值,确定十进制小数位,转换为二进制,计算乘积,显示ascii
.model small
.386
.stack 64
.data
leftcol equ 28 ;屏幕位置的等价符号
rightcol equ 52
toprow equ 10
botrow equ 14
qtyparam label byte ;键盘输入的量参数表
maxqlen db 6
actqlen db ?
qtyfld db 6 dup(?)
ratepar label byte ;键盘输入的速率参数表
maxrlen db 6
actrlen db ?
ratefld db 6 dup(?)
prompt1 db 'Quantily? '
prompt2 db 'Rate? '
prompt3 db 'product= '
ascprod db 10 dup(30h)
prompt4 db 'Press any key to continuc or esc to quit'
adjust dw ? ;数据项
binprod dw 00
binqty dw 00
binrate dw 00
col db 00
decind db 00
mult10 dw 01
nodecims dw 00
row db 00
shift dw ?
tenwd dw 10
.code
a10main proc far
mov ax,@data
mov ds,ax
mov es,ax
mov ax,3 ;设置显示方式和清屏
int 10h
a20: call q10 ;清除窗口
call b10 ;接受量和速率
call c10 ;把量转换为二进制
call d10 ;把速率转换为二进制
call e10 ;计算乘积,舍入
call f10 ;把乘积转化成ASCII
call g10 ;显示乘积
call h10 ;用户暂停
cmp al,1bh ;按ESC
jne a20
mov ax,4c00h
int 21h
a10main endp
b10 proc near
mov row,toprow+1
mov col,leftcol+3
lea bp,prompt1
mov cx,15
call k10
mov ah,ah
lea dx,qtyparam
int 21h
mov col,leftcol+3
inc row
lea bp,prompt2
mov cx,15
call k10
mov ah,0ah
lea dx,ratepar
int 21h
inc row
b10 endp
c10 proc near
mov nodecims,00 ;清除十进制小数位的长度
mov cx,actqlen
lea si,qtyfld-1
add si,cx
call j10
mov ax,binprod
mov binqty,ax
ret
c10 endp
d10 proc near
movzx cx,actrlen
lea si,ratefld-1
add si,cx
call j10
mov ax,binprod
mov binrate,ax
ret
d10 endp
e10 proc near
mov cx,10
lea di,ascprod
mov al,30h
cld
rep stosb
mov shift,10
mov adjust,00
mov cx,nodecims
cmp cl,6
ja e40
sub cx,02
jle e30
mov nodecims,02
mov ax,01
e20: imul ax,10
loop e20
mov shift,ax
shr ax,1
mov adjust,ax
e30: mov ax,binqty
mul binrate
add ax,adjust
adc dx,00
cmp dx,shift
jb e50
e40: xor ax,ax
jmp e70
e50: cmp adjust,00
jz e80
div shift
e70: xor dx,dx
e80: ret
e10 endp
f10 proc near
lea si,ascprod-7
mov byte ptr[si],'.' ;设置小数点
add si,nodecims
f30: cmp byte ptr[si],'.'
jne f40
dec si
f40: cmp dx,00
jne f50
cmp ax,0010
jb f60
f50: div tenwd
or dl,30h
mov [si],dl
sub dx,dx
jmp f30
f60: or al,30h
mov [si],al
ret
f10 endp
g10 proc near
mov col,leftcol+3
mov cx,09
lea si,ascprod
g20: cmp byte ptr[si],30h
jne g30
mov byte ptr[si],20h
inc si
loop g20
g30: lea bp,prompt3
mov cx,20
call k10
ret
g10 endp
h10 proc near
mov col,20
mov row,22
lea bp,prompt4
mov cx,40
call k10
mov ah,10h
int 16h
ret
h10 endp
j10 proc near
mov mult10,0001
mov binprod,00
mov decind,00
xor bx,bx
j20: mov al,[si]
cmp al,'.'
jne j30
mov decind,01
jmp j40
j30: and ax,000fh
mul mult10
add binprod,ax
mov ax,mult10
imul ax,10
mov mult10,ax
cmp decind,00
jnz j40
inc bx
j40: dec si
loop j20
cmp decind,00
jz j90
add nodecims,bx
j90: ret
j10 endp
k10 proc near
mov ax,1301h
mov bx,0016h
mov dh,row
mov dl,col
int 10h
k10 endp
q10 proc near
mov ax,0605h
mov bh,16h
mov ch,toprow
mov cl,leftcol
mov dh,botrow
mov dl,rightcol
int 10h
q10 endp
end a10main
附件: 您所在的用户组无法下载或查看附件