码迷,mamicode.com
首页 > 其他好文 > 详细

实验 9 根据材料编程

时间:2018-12-14 22:53:04      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:loop   地址   中间   单元   masm   使用   方法   颜色   循环   

1. 补全程序 t1.asm,完成在屏幕上输出内存单元中的十进制两位数

; 在屏幕上输出内存单元中的十进制两位数
assume cs:code, ds:data
data segment
  db 12
  db ?,? ; 前一个字节用于保存商,后一个字节用于保存余数
data ends
code segment
start:
  mov ax,data
  mov ds,ax ; 补全指令,使得ds <-- data段地址

  mov ah,0
  mov al,ds:[0] ; ax <-- data段字节单元的被除数12
  mov bl,10
  div bl
  mov ds:[1],al ; 补全代码,让商保存到data段注释中指定的单元
  mov ds:[2],ah ; 补全代码,让余数保存到data段注释中指定的单元

  mov ah,2
  mov dl,ds:[1] ; 补全代码,使得dl <-- data段中保存的商的字节单元数值
  add dl,30h ; 补全代码,使得dl中的数值转换为数字字符
  int 21h

  mov ah,2
  mov dl,ds:[2] ; 补全代码,使得dl <-- data段中保存余数的字节单元数值
  add dl,30h ; 补全代码,使得dl中的数值转换为数字字符
  int 21h

  mov ax,4c00h
  int 21h
code ends
end start

技术分享图片

因为被除数可以被ax存储,所以除数被存在al,余数被存在ah

2. 补全程序 t2.asm,完成在屏幕上输出 data 段定义的 5 个十进制两位数,数据和数据 之间以空格间隔。

assume cs:code, ds:data
data segment
  db 12,35,96,55,67
data ends
code segment
start:
  ; 补全程序,参考t1.asm,综合应用以下知识完成:
  ; (1) loop指令、内存单元地址的灵活表示
  ; (2) div指令, 数字→数字字符的转换
  ; (3) int 21h的2号子功能,完成单个字符输出的方法,即:
  ; mov ah,2
  ; mov dl,待输出字符或其ASCⅡ码
  ; int 21h
  ; (4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符
  mov ax,data
  mov ds,ax
  mov cx,5
  mov bl,10
  mov si,0
s:  mov ah,0
  mov al,ds:[si]
  div bl
  mov ds:[si],al
  mov ds:[si+5],ah
  mov ah,2
  mov dl,ds:[si]
  add dl,30h
  int 21h
  mov ah,2
  mov dl,ds:[si+5]
  add dl,30h
  int 21h
  inc si
  mov ah,2
  mov dl,20h
  int 21h
  loop s
  mov ax,4c00h
  int 21h
code ends
end start

技术分享图片

3.编程:在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串‘welcome to masm!’。

; p187 实验9

assume ds:data, cs:code
data segment
  db ‘welcome to masm!‘
  db 2H,24H,71H ;字符串属性值
data ends

code segment
start: mov ax,data
  mov ds,ax ;字符串及属性值所在段的段地址送入ds

  mov ax,0b800H
  mov es,ax ;80×25彩色字符模式显示缓冲区段地址送入es

; 添加代码,通过循环逐个将每个字符及其属性送入相应的显示缓冲区对应行
; 即:将data段的字符及属性通过循环逐个mov到显示缓冲区(es)段相应的单元内

; 可以先尝试分别写三段代码,每次完成一行的显示
; 程序运行起来后,再尝试通过灵活的寻址方式和循环,对三段代码修改和简化
; 学习第10章子程序后,还可以进一步完善优化,设计子程序,将行号、列号、颜色属性设置成入口参数

  mov bx,1920
  mov si,0
  mov cx,16
s:     mov ax,ds:[si]
  mov ah,2h
  mov es:[bx+40h],ax
  mov ah,24h
  mov es:[bx+40h+0a0h],ax
  mov ah,71h
  mov es:[bx+40h+0a0h+0a0h],ax
  inc si
  add bx,2
  loop s
  mov ax,4c00h
  int 21h
code ends
end start

一共25行,中间三行是12,13,14;字符串一共16个字符,所以起始位置为第32列

技术分享图片

 

实验 9 根据材料编程

标签:loop   地址   中间   单元   masm   使用   方法   颜色   循环   

原文地址:https://www.cnblogs.com/zstorma/p/10121647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!