学完视频18 再写一次 dtoc 1234567890
学习了第18个视频,思路有所进步,再写一遍这个代码,比原来思路清楚多了。代码中与视频中不同一点:没有把转化成的字符先压入堆栈,而是直接放到了 _save_c 数据段,显示的时候从后向前显示。第一次代码地址: https://www.chinapyg.com/viewthread.php?tid=60715assume cs:code
stack segment
dw 100 dup(0)
stack ends
data segment
_num dd 1234567890
_save_c dw 20h dup(0)
data ends
code segment
_div:
xor si,si ;必须清0,因为下面 _div_2 里面还要把 si 值放到 dx 里面
test dx,dx ;测试高16位是否为 0
jz _div_2
push ax
mov ax,dx
xor dx,dx
div cx
mov si,ax
pop ax
_div_2: ;低16位做除法
div cx
push dx
mov dx,si ;上面 si 不清0 ,这里当 dx 为0时,si 的内容就会赋值给 dx,结果就错了
pop si
retn
;显示字符串
_show: ;初始化显示
mov ax,0b800h
mov es,ax
mov si,12*160+20*2
mov bx,offset _save_c
mov cx,di
inc cx ;加1因为 cx=0 时就不显示了,而在 _save_c 偏移0位置还有数据
_t: ;显示
mov ax,
mov ah,6 ;颜色
mov es:,ax
add si,2
dec di
loop _t
retn
;程序结束
_over:
mov ax,4c00h
int 21h
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,200h
mov si,0
mov di,0
mov cx,10
mov bx,offset _num
mov ax,
mov dx,
_s: call _div
mov bx,offset _save_c
add si,30h
push cx
mov cx,si
mov ,cl
pop cx
inc di
test dx,dx
jnz _s
test ax,ax
jnz _s
call _show
jmp _over
code ends
end start
支持关注中!
http://www.discuz.net/static/image/common/sigline.gif
燃文 楼主很有想法
页:
[1]