Assembly language 实验10-3
实验10-3assume 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, ; 数据存到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 , bl ; 转换好的数据存到字符串中
inc si
loop c2m
mov byte ptr , 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 ; /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,
jcxz exit ; 结尾则退出
mov es:, cl ; 存储字符的ASCII
inc di
mov es:, 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
**** Hidden Message *****
强力支持楼主! 强力支持楼主! 看看。。。。。。。。。。。。。。 卡在实验10-3了!!! 强力支持楼主! 看看。。。。。 看看。。。。。。 感谢楼主分享 强力支持楼主! sdfsdfs 楼主强,顶一下 程序运行卡死。 学习中......
页:
[1]