zoukankan      html  css  js  c++  java
  • 汇编语言 实验9

    实验9

    实验任务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       ;12/10

          mov  ds:[2],al    ;让商保存到data段注释中指定的单元

          mov  ds:[3],ah    ; 让余数保存到data段注释中指定的单元

          mov ah,2

          mov dl,ds:[2]    ; 使得dl <-- data段中保存的商的字节单元数值

          or dl,00110000b       ; 使得dl中的数值转换为数字字符

          int 21h

          mov ah,2

          mov dl,ds:[3]     ; 使得dl <-- data段中保存余数的字节单元数值

          or dl,00110000b        ; 使得dl中的数值转换为数字字符     

          int 21h

          mov ax,4c00h

          int 21h

    code ends

    end start

    实验结果:

     

    Tips:

    1.如果mov [内存单元],寄存器  可以显示正确结果,但会报错

    改成mov ds:[内存单元],寄存器  就不会报错了

    2.如果mov 寄存器,[内存单元]  不能显示正确结果。

    虽然不会报错,但是会直接把内存单元的偏移地址送到寄存器内,而不是传送寄存器的内容

     

     

    实验任务2

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

    源代码部分:(横线上为补全和修改的部分)

    assume cs:code, ds:data

    data segment

         db 12,35,96,55,67

         db 10 dup (0)

    data ends

    code segment

    start:  mov ax,data   ;设置数据段

          mov ds,ax

     

          mov bx,0   ;数据段初始偏移地址为0

          mov cx,5    ;5个数据循环5次

     

    s:   mov al,ds:[bx]     ;ax中依次放入数据段数据(字节型)

          mov ah,0

          mov dl,10

          div dl      ;为了实现十进制输出

          or ah,00110000b    ;数字字符->数字的ASCII码

          or al,00110000b

     

          mov ds:[bx+5],al   ;将商暂存在事先定义的数据段中

          mov ds:[bx+6],ah    ;将余数暂存在事先定义的数据段中

    ;输出商

          mov ah,2        

          mov dl,ds:[bx+5]

          int 21h

    ;输出余数

          mov ah,2

          mov dl,ds:[bx+6]

          int 21h

    ;输出空格

          mov ah,2

          mov dl,' '

          int 21h

     

          inc bx      ;每次bx+1(字节型),循环

          loop s

          mov ax,4c00h

          int 21h

    code ends

    end start

    实验结果:

     

    Tips:

    1. 需要预留几个单元用来存放要输出的十进制数据,否则寄存器不够用
    2. 注意存放的数据为字节型数据
    3. 由于输出的是十进制数据,而非十六进制,所以要用到除法,通过除以10取余来得到每一个位上的数字,保存下来并输出
    4. 注意要把数字字符转换为数字的ASCII码保存,这样才能正确在屏幕上输出数字
    5. 在屏幕上输出数字只能单个输出,还需要数据与数据之间输出空格来分隔

    实验任务3

    (1)     在屏幕上0行0列显示黑底绿色的字符串”ABCDEF”

    (2)     在屏幕上0行0列显示红底高亮闪烁绿色的字符串”ABCDEF”

    直接在debug环境下调试(闪烁效果在全屏下才能看到)

    实验结果:

     

     

    实验9——总结

    收获:最大的收获是综合应用所学知识,完成了试验任务2。虽然编写源程序的时候有些不熟悉用法,调试几次才发现问题,但按照老师提供的技巧,思路清晰地分析并总算是自己完成了,还是很开心的。学到后面不是单个知识点的简单堆砌了,很多知识点需要融会贯通,所以通过动手实验来熟悉基本用法越来越重要了。

  • 相关阅读:
    ELK学习总结(2-1)mavel -》sense 和 索引初始化
    ELK学习总结(1-3)倒排索引
    java基础总结(1)安装jdk
    ELK学习总结(1-2)安装ElasticSearch
    T410升级笔记
    CURL学习总结(1)
    restful架构风格设计准则(二)以资源为中心,一个url
    GIT入门笔记(18)- 标签创建和管理
    GIT入门笔记(17)- 创建分支dev_lsq, 提交到代码
    GIT入门笔记(16)- 分支创建和管理
  • 原文地址:https://www.cnblogs.com/cjh-1023/p/10067377.html
Copyright © 2011-2022 走看看