- UID
- 65892
注册时间2010-3-1
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 慵懒 2024-12-4 10:07 |
---|
签到天数: 444 天 [LV.9]以坛为家II
|
学习了第18个视频,思路有所进步,再写一遍这个代码,比原来思路清楚多了。代码中与视频中不同一点:没有把转化成的字符先压入堆栈,而是直接放到了 _save_c 数据段,显示的时候从后向前显示。
第一次代码地址: https://www.chinapyg.com/viewthread.php?tid=60715- assume 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,[bx+di]
- mov ah,6 ;颜色
- mov es:[si],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,[bx]
- mov dx,[bx+2]
- _s: call _div
- mov bx,offset _save_c
- add si,30h
- push cx
- mov cx,si
- mov [bx+di],cl
- pop cx
- inc di
- test dx,dx
- jnz _s
- test ax,ax
- jnz _s
- call _show
- jmp _over
- code ends
- end start
复制代码
|
|