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

posted @ 2018-12-04 21:37  无ni不欢  阅读(523)  评论(0编辑  收藏  举报