马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ┈━═☆佳佑 于 2013-6-20 19:19 编辑 ;题目是 将 data段 123,12666,1,8,3,38 以十进制显示出来。
assume cs:code,ss:stack
data segment
dw 123,12666,1,8,3,38,0,0 ; 后加两字 构成16字节 便于计算 (ds:0-f)
dw 24 dup (0) ;定义三行16字节 存放ASCII码 (ds:10h-3fh)
data ends
stack segment
db 16 dup (0)
stack ends
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
code segment
start: mov ax,data
mov ds,ax
mov si,0
mov di,16
mov ax,stack
mov ss,ax
mov sp,16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;转换;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call dtoc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
call show_str
mov ax,0100h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;转换;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dtoc: mov bx,0
push bx ;栈入0定位
mov ax,[si] ;低16位
s0: mov dx,0 ;高16位
mov cx,10 ;除数
div cx
mov cx,dx
add dx,30h
push dx
loop s0 ;取ASCII
s1: pop cx
mov [di],cl
inc di
jcxz s2
loop s1 ;每字按顺序排放(loop可改为JMP)
s2: mov cx,ds:[si]
add si,2
jcxz s3
jmp dtoc ; !!!!!问题在这!!!!
s3: ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
show_str: ret ;按步骤来 dtoc 还没对
code ends
end start
问题在这! (55.) 这用loop dtoc 就能在 cmd debug 里顺利跟踪!用jmp在 在debug里面“t”跟踪不了总乱返回出程序!
;我把显示段子程序加上去 用LOOP指令 能显示到1 用JMP指令什么都不显示,用LOOP 只能显示到 DS段第三个字“1”(CX)=0001h ,运行LOOP指令 都是先CX-1再判断是否循环 所以 DS段第三字后就不显示了 。为什么 用 jmp dtoc 就debug 跟踪不了呢?
|