谁帮我看看又哪错了 怎么没效果呢 实验10 第三题
assume cs:codedata segment
db 10 dup (0)
data ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:push si
push cx
push di
push bx
mov di,0
s1:mov dx,0
mov bx,10d
div bx
add dx,30H
push dx
inc di
mov cx,ax
jcxz ok1
jmp s1
ok1:mov cx,di
s2:pop ds:
add si,2
loop s2
pop di
pop cx
pop si
ret
show_str:push cx
push si
mov bx,0b800h
sub dh,1
mov al,dh
mov ah,0ah
mul ah
add bx,ax
mov es,bx
mov al,2
mul dl
sub ax,2
mov di,ax
mov bl,cl
s:mov cl,ds:
mov ch,0
jcxz ok
mov es:,cl
mov es:,bl
inc si
add di,2
jmp s
ok: pop si
pop cx
ret
code ends
end start
做了好几个实验了总是存在问题打消我积极性 我自己检查不出来哪里错了求帮助 谢谢了
本帖最后由 liangfei44 于 2013-9-3 21:23 编辑
没仔细看,你dtoc的push和pop没有完全配对!造成retn的时候,ip取到另一个栈地址。 表示看不懂,不会,只是感到开头第二行和第三行,好相有点别扭,,楼下帮他看看吧 意见保留—— {:1_1:}顶。。。。 找到答案自己比对下吧, ;name:dtoc
;function:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符
;参数:(ax)=word型数据;ds:si指向字符串的首地址
;返回:无
;应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。
assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start:
mov ax,12666 ;ax中存储了一个2进制数
mov bx,data
mov ds,bx ;ds:si point data segment
mov si,0
call dtoc
call show_string
mov ax,4c00h
int 21h
dtoc:
mov dx,0
s: mov bx,10
div bx ;doing a 16bit division
mov cx,dx
jcxz ok
add dl,30h
mov ,dl
inc si
mov dx,0
mov cx,0
jmp short s
ok: ret
show_string:
mov bx,0b800h
mov es,bx ;es:si定位显存
mov bx,1286 ;偶数位存储字符,基数位存储属性
dec si
s1: mov al,
mov cl,al
mov ch,0
jcxz ok1
mov es:,al
mov dl,2
inc bx
mov es:,dl
dec si
inc bx
jmp s1
ok1:ret
code ends
end start
页:
[1]