实验9

实验九

1.

在屏幕上输出内存单元中的十进制两位数。

; 在屏幕上输出内存单元中的十进制两位数
assume cs:code, ds:data
data segment
     db 12
     db 0,0   ; 前一个字节用于保存商,后一个字节用于保存余数
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

编译链接后结果如下

 

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

assume cs:code, ds:data
data segment
     db 12,35,96,55,67
     
data ends
code segment
start:
      mov ax,data
      mov ds,ax
      mov cx,5
      mov bx,0

s:    mov ax,0
      mov dl,10
      mov al,[bx]
      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,20H
      int 21H 
      inc bx
      loop s
      
      mov ax,4c00h
      int 21h
code ends
end start
View Code

编译链接后结果如下

3. 教材实验9(P187) 

; 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

        mov cx,3
    mov si,1824
    mov di,16

     s0:mov dx,cx
    mov cx,16
    mov bx,0

     s1:mov al,[bx]
    mov ah,[di]
    mov es:[si],ax
    inc bx
    add si,2
    loop s1

    inc di
    add si,80h
    mov cx,dx
    loop s0
    
        mov ax,4c00h
        int 21h
code ends
end start
View Code

编译链接后结果如下

总结体会

实验一因为提示较多,所以减轻了思考量,先通过除十,商为十位上的值,余数为个位数上的值。

实验二的思路其实和实验一大同小异

输出方法,单个字符输出。其中dl是ASCII码。

    mov ah,2 

    mov dl,al

    int 21h

实验三

在显存中,B800H~BFFFFH为80*25的彩色字符的显示缓冲区,显示器可以显示25行,每行80个字符,每个字符可以有256种属性(背景色、前景色、闪烁、高亮等组合信息)

偏移 000~09F 对应显示器上的第1行

偏移0A0~13F 对应显示器的第二行

以此类推

关于多重循环,loop只能判断CX的值,要多重循环时,就必须先把CX的值,藏起来,再给CX重新赋值。这个过程可以用栈来执行。如果循环次数少,则用寄存器来存。

posted on 2018-12-10 14:41  此名很文艺  阅读(67)  评论(1编辑  收藏  举报