找回密码
 立即注册
查看: 2654|回复: 0

汇编作业 实验10(3)

[复制链接]

78

主题

109

回帖

1023

积分

高级会员

积分
1023

猴年

龙龙实名认证 发表于 2015-6-22 03:12:22 | 显示全部楼层 |阅读模式
  
  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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|虫虫联盟 ( 备案号:蜀ICP备15018121号-1 )

GMT+8, 2026-4-19 13:09 , Processed in 2.386083 second(s), 26 queries .

Powered by Discuz! X5.0 Licensed

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表