|  | 
 
| 
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  实验10-3 
 
assume cs:code, ds:data  
 data segment
 db 10 dup(0)
 dw 123, 12666, 1, 8, 3, 38
 data ends
 
 code segment
 start:
 mov ax, data
 mov ds, ax
 mov si, 0    ; 字符串的首地址
 mov bx, 0aH  ; 待转换数据的首地址
 mov di, 0    ; 待转换数据的相对bx偏移地址
 mov cx, 6    ; 6个待显示数据
 mov dh, 4    ; 从第4行开始逐行显示数据
 mov dl, 0    ; 从第0列开始显示每行数据
 trans:
 push cx
 push dx
 mov dx, 0         ; 高16位设为0存到dx
 mov ax, [bx][di]  ; 数据存到ax,当作低16位
 call dtoc         ; 数据转化为ASCII的10进制
 mov cl, 2         ; 字体显示为绿色
 pop dx
 call show_str     ; 显示数据的ASCII
 add di, 2         ; 下一个数据
 inc dh            ; 行数+1
 pop cx
 loop trans
 
 mov ax, 4c00H
 int 21H
 
 ; 子程序dtoc
 dtoc:
 push bx
 push cx
 push dx
 push si
 
 mov bx, 0         ; 记录数字位数
 s0:
 mov cx, ax        ; 判断ax是否为0
 jcxz ok           ; 为0则结束转换
 mov cx, 10        ; 除数为10
 call divdw        ; 防溢出的除法
 add cx, 30H       ; 余数转换为ASCII
 push cx           ; 余数入栈
 inc bx            ; 数字位数+1
 jmp short s0
 ok:
 mov cx, bx
 c2m:
 pop bx
 mov [si], bl            ; 转换好的数据存到字符串中
 inc si
 loop c2m
 mov byte ptr [si], 0    ; 字符串结束标志为0
 
 pop si
 pop dx
 pop cx
 pop bx
 ret
 
 ; 子程序divdw
 divdw:
 push bx
 
 mov bx, ax        ; 低16位L暂时存在bx
 mov ax, dx        ; 高16位H送到ax
 mov dx, 0
 div cx            ; H/N
 push ax           ; int(H/N)入栈
 mov ax, bx
 div cx            ; [rem(H/N)*65536+L]/N
 mov cx, dx        ; 余数送到cx
 pop dx            ; int(H/N)出栈
 
 pop bx
 ret
 
 ; 子程序show_str
 show_str:
 push ax
 push bx
 push bp
 push cx
 push si
 push di
 push es
 
 mov bl, cl            ; 字体颜色存在bl中
 mov ax, 0b800H
 mov es, ax            ; 显示缓冲区的段地址存在es
 mov ax, 0a0H
 mul dh                ; 计算第n行的首地址
 mov bp, ax            ; 将第n行的首地址存在bp
 mov ax, 2
 mul dl                ; 计算第m列的偏移地址
 mov di, ax            ; 将第n列存在di
 ctom:
 mov ch, 0             ; 判断字符串是否到了结尾
 mov cl, [si]
 jcxz exit             ; 结尾则退出
 mov es:[bp][di], cl   ; 存储字符的ASCII
 inc di
 mov es:[bp][di], bl   ; 存储字符的属性
 inc si
 inc di
 jmp short ctom
 exit:
 pop es
 pop di
 pop si
 pop cx
 pop bp
 pop bx
 pop ax
 ret
 code ends
 end start
 
 
 
 
 
 | 
 |