汇编语言实验九

  • 实验任务一

1. 填写的代码:

assume cs:code, ds:data
data segment
     db 12
     db 0,0  ; 前一个字节用于保存商,后一个字节用于保存余数
data ends
code segment
start:
      mov bx,data
      mov ds,bx        ; 补全指令,使得ds <-- data段地址
      
      mov ah,0
      mov al,ds:[0]   ; ax <-- data段字节单元的被除数12
      mov bl,10
      div bl
      mov  ds:[16],al    ; 补全代码,让商保存到data段注释中指定的单元
      mov  ds:[17],ah    ; 补全代码,让余数保存到data段注释中指定的单元

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

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

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

2. 使用debug进行调试、跟踪、执行

(1)使用r命令和u命令确定指令的物理地址

(2)使用g命令执行

(3)可以看到屏幕上显示了结果12

  • 实验任务二

1. 填写的代码:

assume cs:code, ds:data
data segment
     db 12,35,96,55,67
data ends
code segment
start:
      mov bx,data
      mov ds,bx
      
      mov bx,0
      mov si,0
      mov cx, 5
  s:  mov ah,0
      mov al,[si]
      mov bl,10
      div bl
     
      mov bx,ax  ;用寄存器bx来保存商和余数
  
      mov ah,2   ;调用子程序输出商
      mov dl,bl 
      add dl,30H
      int 21h
   
      mov ah,2   ;调用子程序输出余数
      mov dl,bh
      add dl,30H
      int 21h

      mov ah,2  ;调用子程序输出空格
      mov dl,20h
      int 21h
      
      inc si
      loop s
    
      mov ax,4c00h
      int 21h
code ends
end start

2. 使用debug调试、跟踪、执行

(1)使用r命令和u命令确定指令的物理地址,然后用g执行

(2)可以看到按要求显示了“12 35 96 55 67”,每个数据之间用空格隔开

  • 实验任务三

1. 填写的代码:

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
        
        mov bx,0
        mov bp,16 ;属性
        mov di,071ch  ;显存变量
        mov cx,3
    s:  mov bx,cx
        mov si,0   ;每一个字母
        mov cx,16
  
  s0: mov ax,0
       mov al,[si]  ;地位字节存放字符ASCII码
       mov ah,[bp] ;高位字节存放字符属性
       mov es:[di],ax
       inc si
       add di,2h
       loop s0
       
       add di,80h  ;每行之间相差80h
       mov cx,bx
       inc bp
       loop s
   
        mov ax,4c00h
        int 21h
code ends
end start

2. 使用集成软件进行调试、执行

可以看到三行“welcome to masm!"按照绿色,绿底红字,白底蓝字显示出来了

  • 练习

1. debug环境的练习

2. 集成软件的练习

  • 总结与体会

1. 通过本次实验我更熟悉了汇编语言源程序的编写,也进一步巩固了debug的使用,使用了新学的指令,如div,还使用了新学的更灵活的内存单元地址的表示,例如[si]、[di]、[bp]等。

2. 通过前两个实验任务,熟悉了输出字符的子程序,显示了数据,通过实验任务三,还学会了自己编程实现向显存写入数据,达到了不同显示效果的目的

 

posted @ 2018-12-05 22:35  Cyiii  阅读(335)  评论(0编辑  收藏  举报