实验报告:实验九

实验内容:

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

  

add cx, 30H,表示把cx中的余数(数字)转变成字符,因为,‘0’的ASCII码为30H

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 bx,0
      mov cx,5

s:    mov ah,0
      mov al,ds:[bx]
      mov dl,10
      div dl

      mov dl,al
      mov dh,ah

      mov ah,2
      add dl,30h
      int 21h

      mov ah,2
      mov dl,dh
      add dl,30h
      int 21h

      mov ah,2
      mov dl,0
      int 21h

      inc bx
      loop s
      mov ax,4c00h
      int 21h
code ends
end start

代码如上结果如下:

可以从图中看出我原来的结果只能出现第一组数即:12 00 00 00

原因是一开始我将除数存在bl中,但是我又使用了bx作为偏移地址,结果两者相互影响和修改了。

经过请教同学,将除数存在dl中,每次循环更新dl,dl的输出并不受影响,结果方才正确。

3.书P187实验9

本实验需要计算屏幕中间三行对应位置的单元数,我只大概进行了粗略了估算。

; 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 cx,3
        mov bx,0
        mov bx,1760
        mov bp,0

s:      push cx
        mov cx,16
        mov di,0
        mov si,66

s1:     mov al,ds:[di]
        mov es:[si+bx],al
        inc si
        mov al,ds:[bp+10h]
        mov es:[si+bx],al
        inc si
        inc di
loop  s1
        inc bp
        add bx,160
        pop cx
loop s
        mov ax,4c00h
        int 21h
code ends
end start

结果如上图。

总结和体会:

1.对汇编中输出字符数字的方法程序有所掌握。

2.更加熟练运用循环,双重循环压栈保护cx理解更深刻。

3.对于汇编中彩色字符模式中的知识点有所掌握。

原文地址:https://www.cnblogs.com/xue123/p/10088580.html

时间: 2024-08-29 22:20:43

实验报告:实验九的相关文章

山东大学 机器学习 实验报告 实验2 模式分类 上机练习

[17级的同辈们,这是我实验报告真实且全部的内容,求求求求你们,不要让我后悔提前发布 ╥﹏╥... .真的挺简单的,1天就能搞定,而且在书里的位置我都标注出来了,让我们来一起学习吧!!!( ̄▽ ̄)",当然错了也概不负责哈~~~~] 3.实验内容及说明 使用上面给出的三维数据: 1. 编写程序,对类 1 和类 2 中的 3 个特征 x i 分别求解最大似然估计的均值???和方差?? ?2. 2. 编写程序,处理二维数据的情形??(??)~??(??,??).对类 1 和类 2 中任意两个特征的组合

实验报告 实验2 固件设计

北京电子科技学院(BESTI) 实     验    报     告 课程: 密码系统设计基础                                                               班级: 1352班.1353班 姓名:王玥.刘浩晨                                                                    学号:20135232.20135318 成绩:                      

JAVA课程实验报告 实验二 JAVA面向对象程序设计

课程:Java程序设计  班级:1352  姓名:黄伟业  学号:20135315 成绩:             指导教师:娄嘉鹏    实验日期:2015.5.7 实验密级:         预习程度:         实验时间:15:50--20:50 仪器组次:         必修/选修: 选修            实验序号:2 实验目的: 1.掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了

实验报告 实验4 外设驱动程序设计

北京电子科技学院(BESTI) 实     验    报     告 课程: 密码系统设计基础                                                               班级: 1352班.1353班 姓名:王玥.刘浩晨                                                                    学号:20135318.20135232 成绩:                      

数据机构实验报告-实验三 二叉树基本操作的实现

实验三   二叉树基本操作的实现   l  实验目的 1.二叉树的基本操作 (1)掌握二叉树链表的结构和二叉排序树的建立过程. (2)掌握二叉树排序树的插入和删除操作. (3)加深对二叉树的理解,逐步培养解决实际问题的编程能力. 2.树的遍历和哈夫曼树 (1)掌握用递归方法实现二叉树遍历的操作. (2)掌握用非递归方法实现二叉树遍历的操作. (3)掌握建立Huffman树的操作. (4)加深对二叉树的理解,逐步培养解决实际问题的编程能力. l  实验内容 1.二叉树的基本操作 (一)基础题 (1

数据结构实验报告-实验四 图的构造与遍历

实验四   图的构造与遍历   l  实验目的 1.图的的定义和遍历 (1)掌握图的邻接矩阵.邻接表的表示方法. (2)掌握建立图的邻接矩阵的算法. (3)掌握建立图的邻接表的算法. (4)加深对图的理解,逐步培养解决实际问题的能力. l  实验内容 1.图的定义和遍历 (一)基础题 1.编写图基本操作函数: (1)CreateALGraph(ALGraph &G) 建立无向图的邻接表表示: (2)LocateVex(ALGraph &G,char v)图查找信息: (3)DFSTrave

数据结构实验报告-实验一 顺序表、单链表基本操作的实现

实验一    顺序表.单链表基本操作的实现   l  实验目的 1.顺序表 (1)掌握线性表的基本运算. (2)掌握顺序存储的概念,学会对顺序存储数据结构进行操作. (3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能力. l  实验内容 1. 顺序表 1.编写线性表基本操作函数: (1)InitList(LIST *L,int ms)初始化线性表: (2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插入元素: (3)DeleteList1

数据结构实验报告-实验五 查找

实验五   查找   l  实验目的 1. 查找的基本概念 掌握在数组上进行各种查找的方法和算法. 深刻理解各种方法的特点,并能灵活运用. 加深对查找的理解,逐步培养解决实际问题的能力. l  实验内容 1.查找的基本概念 (一)基础题 1.编写各种查找方法的基本操作函数: (1)search1(int *k,int n,int key)无序线性表的顺序查找: (2)search2(int *k,int n,int key)有序线性表的顺序查找: (3)bin_search(int *k,int

JAVA课程实验报告 实验三 敏捷开发与XP实践

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉鹏             实验日期:2015.5.29 实验密级:         预习程度:                     实验时间:15:30--18:00 仪器组次:         必修/选修: 选修             实验序号:3 实验名称:实验三 敏捷开发与XP实践 实

Java课程实验报告 实验一 Java开发环境的熟悉

北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩:            指导教师:娄嘉鹏  实验日期:2015.4.11 实验密级: 预习程度:  实验时间:19:30~21:50 仪器组次: 必修/选修:选修  实验序号:1 实验名称:             JAVA开发环境的熟悉 实验目的与要求: 1. 使用JDK编译.运行简单的Java程序. 2.在命令行和Eclipse下编辑.编译