这个程序运行结果不一样,请帮忙看看!
下面这个程序的作用是把ax中的值12666显示到dos屏幕上,正确的显示应该是:可是我运行后显示出来确实这样的:
这个程序我分析了好几天了,一请大家帮忙分析下,帮我看看是哪里出了问题,谢谢!
assume cs:code
data segment
db 10 dup (0)
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc ;dtoc的作用是把ax中的内容12666放到定义的data段中
mov dh,8 ;dh表示行
mov dl,3 ;dl表示列
mov cl,2 ;cl表示颜色
call show_str ;show_str的作用是把data段中的字符在屏幕上显示出来
mov ax,4c00h
int 21h
dtoc: mov dx,0
mov bx,10
div bx
add dl,30h
mov ds:,dl
mov dx,0
div bx
add dl,30h
mov ds:,dl
mov dx,0
div bx
add dl,30h
mov ds:,dl
mov dx,0
div bx
add dl,30h
mov ds:,dl
mov dx,0
div bx
add dl,30h
mov ds:,dl
ret
show_str: mov ax,0b800h
mov es,ax
mov ax,stack
mov ss,ax
mov al,0a0h
mul dh
mov bx,ax ;确定行的位置
mov al,2
mul dl
mov di,ax ;确定列的位置
s: push cx
mov ch,0
mov cl,
jcxz ok ;判断字符是否为0,不为0则执行下面的语句,为0则跳出
pop cx
mov al,ds:
mov es:,al ;把data段中的字符放到b800h缓冲区中
mov es:,cl ;确定字符的颜色
inc si
add di,2
jmp short s
ok: ret
code ends
end start 自己顶上去,求解答! s: push cx
mov ch,0
mov cl,
jcxz ok ;判断字符是否为0,不为0则执行下面的语句,为0则跳出
pop cx
这一段出问题了检测到cx为0时后面的pop没有执行所以后面ret时指向的IP不对 gggrdfxk 发表于 2015-7-29 10:18
s: push cx
mov ch,0
对!对!是的!十分感谢! :sad:sad:sad 本帖最后由 fast 于 2015-7-31 16:54 编辑
看的有点晕,因为是刚刚学会编
这一段没看明白dtoc: mov dx,0
mov bx,10
div bx
add dl,30h
mov ds:,dl
mov dx,0
div bx 这块有点晕
add dl,30h
mov ds:,dl
mov dx,0
div bx 这不是除法命令吗,用到这不太明白
add dl,30h
mov ds:,dl
mov dx,0
div bx
add dl,30h
mov ds:,dl
mov dx,0
div bx
add dl,30h
mov ds:,dl
ret 我想知道楼主学的汇编是什么书籍
页:
[1]