汇编语言 王爽的实验十的第三题,怎么会产生溢出啊,那位高手看看我这个哪里出错了?
assumecs:codedatasegmentdb10dup(0)dataendscodesegmentstart:movax,12666movbx,datamovds...
assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start: mov ax,12666
mov bx,data
mov ds,bx
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:push ax
push cx
push dx
push es
push si
push di
push bx
mov cx,5
s:mov bx,10
div bx
add dx,30
mov si,4
mov ds:[si],dx
loop s
pop bx
pop di
pop si
pop es
pop dx
pop cx
pop ax
show_str: push ax
push cx
push dx
push es
push si
push di
mov ax,0b800h
mov es,ax ;give video memory to ax segment
;计算位置
mov al,160
mul dh
add dl,dl
mov dh,0
add ax,dx ;算出显示地址
mov di,ax ;显存的偏移地址
mov ah,cl ;色彩属性给ax寄存器的高位
x: mov cl,ds:[si] ;取字母
mov ch,0 ;使得在al取得0时ax=0
jcxz f ;cx为0向f跳转
mov al,cl ;数值放入ax寄存器的低位
mov es:[di],ax ;给显存对应位置
inc si
inc di
inc di
jmp x
f: pop di
pop si
pop es
pop dx
pop cx
pop ax
ret
code ends
end start 展开
data segment
db 10 dup (0)
data ends
code segment
start: mov ax,12666
mov bx,data
mov ds,bx
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:push ax
push cx
push dx
push es
push si
push di
push bx
mov cx,5
s:mov bx,10
div bx
add dx,30
mov si,4
mov ds:[si],dx
loop s
pop bx
pop di
pop si
pop es
pop dx
pop cx
pop ax
show_str: push ax
push cx
push dx
push es
push si
push di
mov ax,0b800h
mov es,ax ;give video memory to ax segment
;计算位置
mov al,160
mul dh
add dl,dl
mov dh,0
add ax,dx ;算出显示地址
mov di,ax ;显存的偏移地址
mov ah,cl ;色彩属性给ax寄存器的高位
x: mov cl,ds:[si] ;取字母
mov ch,0 ;使得在al取得0时ax=0
jcxz f ;cx为0向f跳转
mov al,cl ;数值放入ax寄存器的低位
mov es:[di],ax ;给显存对应位置
inc si
inc di
inc di
jmp x
f: pop di
pop si
pop es
pop dx
pop cx
pop ax
ret
code ends
end start 展开
1个回答
展开全部
add dx,30h 不是30
更多追问追答
追问
改过来还是溢出
追答
assumecs:code,ds:data
data segment
db 10 dup (0)
data ends
code segment
start: mov ax,12666
movbx,data
movds,bx
mov si,0 ;ds:si指向data首地址
call dtoc1
mov dh,8
mov dl,3
mov cl,2
callshow_str
mov ax,4c00h
int 21h
dtoc1: push ax
push bx
push cx
push dx
push si
push di
mov di,0
d10: mov dx,0 ;设置被除数高位为0
mov bx,10 ;除数为10
div bx
add dx,30h ;ax/10的余数+30h,转为字符
push dx ;字符入栈
inc di ;记录字符个数
movcx,ax
jcxz d11 ;当ax/10的商=0时,转到d11执行
jmp d10
d11: movcx,di
d12: pop dx ;字符出栈
mov [si],dl
inc si ;ds:si指向下一单元
loop d12
mov dl,0
mov [si],dl ;设置结尾符0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24);
; (dl)=列号(取值范围0~79);
; (cl)=颜色;
; ds:si指向字符串的首地址。
;返回:无。
show_str:
push ax
push bx
mov ax,0b800h
moves,ax
mov ax,160
mul dh
movbx,ax ;bx=160*dh
mov ax,2
mul dl ;ax=dl*2
add bx,ax ;movbx,(160*dh+dl*2)设置es:bx指向显存首地址
moval,cl ;把颜色cl赋值al
mov cl,0
show0:
movch,[si]
jcxz show1 ;(ds:si)=0时,转到show1执行
moves:[bx],ch
moves:[bx].1,al
inc si ;ds:si指向下一个字符地址
add bx,2 ;es:bx指向下一个显存地址
jmp show0
show1:
pop bx
pop ax
ret
code ends
end start
华芯测试
2024-09-01 广告
2024-09-01 广告
电学测试台是深圳市华芯测试科技有限公司的核心设备之一,它集成了高精度测量仪器与自动化控制系统,专为半导体芯片、电子元件及模块的电性能检测而设计。该测试台能够迅速、准确地完成电压、电流、电阻、电容及频率等关键参数的测试,确保产品质量符合行业标...
点击进入详情页
本回答由华芯测试提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询