狂潮丶 发表于 2013-8-4 23:35:43

Assembly language 实验10-3

实验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, ; 数据存到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 *****

怡静 发表于 2013-8-5 01:14:17

强力支持楼主!

a769973411 发表于 2013-8-5 09:07:50

强力支持楼主!

小9 发表于 2013-9-28 12:27:04

看看。。。。。。。。。。。。。。

生活! 发表于 2013-12-18 19:38:47

卡在实验10-3了!!!

R-S 发表于 2014-3-20 22:39:34

强力支持楼主!

doomsday 发表于 2014-3-20 23:48:37

看看。。。。。

忧伤飞羽 发表于 2014-6-18 20:56:43

看看。。。。。。

blueboz 发表于 2014-7-1 23:10:21

感谢楼主分享

超级无敌西瓜 发表于 2014-7-4 17:01:52

强力支持楼主!

wxguang101 发表于 2016-9-1 16:02:40

sdfsdfs

cosmos3919 发表于 2016-9-5 16:58:37

楼主强,顶一下

cosmos3919 发表于 2016-9-5 17:34:56

程序运行卡死。

luyouqi006 发表于 2016-10-15 07:29:35

学习中......
页: [1]
查看完整版本: Assembly language 实验10-3