- 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
 
 
  复制代码 
 
 |   
 
 
 
 |