汇编实验九

实验结论

1. 补全程序 t1.asm,完成在屏幕上输出内存单元中的十进制两位数

代码如下:

 1 ; 在屏幕上输出内存单元中的十进制两位数
 2 assume cs:code, ds:data
 3 data segment
 4      db 12
 5      db 0,0   ; 前一个字节用于保存商,后一个字节用于保存余数
 6 data ends
 7 code segment
 8 start:
 9       mov ax,data
10       mov ds,ax        ; 补全指令,使得ds <-- data段地址
11       
12       mov ah,0
13       mov al,ds:[0]   ; ax <-- data段字节单元的被除数12
14       mov bl,10
15       div bl
16       mov  ds:[1],al    ; 补全代码,让商保存到data段注释中指定的单元
17       mov  ds:[2],ah    ; 补全代码,让余数保存到data段注释中指定的单元
18 
19       mov ah,2
20       mov dl,ds:[1]    ; 补全代码,使得dl <-- data段中保存的商的字节单元数值
21       add dl,30h       ; 补全代码,使得dl中的数值转换为数字字符
22       int 21h
23 
24       mov ah,2
25       mov dl,ds:[2]     ; 补全代码,使得dl <-- data段中保存余数的字节单元数值
26       add dl,30h        ; 补全代码,使得dl中的数值转换为数字字符      
27       int 21h
28 
29       mov ax,4c00h
30       int 21h
31 code ends
32 end start

运行结果如下:

 

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

 

代码如下:

 1 assume cs:code, ds:data
 2 data segment
 3      db 12,35,96,55,67
 4 data ends
 5 code segment
 6 start:
 7       ; 补全程序,参考t1.asm,综合应用以下知识完成:
 8       ; (1) loop指令、内存单元地址的灵活表示
 9       ; (2) div指令, 数字→数字字符的转换
10       ; (3) int 21h的2号子功能,完成单个字符输出的方法,即: 
11       ;     mov ah,2
12       ;     mov dl,待输出字符或其ASCⅡ码
13       ;     int 21h
14       ; (4) 数据和数据之间以空格间隔的实现: 使用(3)输出空格字符
15       mov ax,data
16       mov ds,ax
17       mov si,0
18       mov cx,5
19 
20 s:    mov ah,0
21       mov al,ds:[si]
22       mov bl,10
23       div bl
24       mov dl,al
25       mov dh,ah
26       
27       mov ah,2
28       add dl,30h
29       int 21h
30 
31       mov ah,2
32       mov dl,dh
33       add dl,30h
34       int 21h
35 
36       mov ah,2
37       mov dl,0
38       int 21h
39       inc si
40       loop s
41 
42       mov ax,4c00h
43       int 21h
44 code ends
45 end start

运行结果如下:

3. 教材实验 9(P187)

代码如下:

 1 assume ds:data, cs:code,ss:stack
 2 data segment
 3        db 'welcome to masm!'  
 4        db 2H,24H,71H          ;字符串属性值
 5 data ends
 6 stack segment
 7        db 0
 8 stack ends
 9 code segment
10 start: mov ax,data
11         mov ds,ax            ;字符串及属性值所在段的段地址送入ds
12         mov ax,stack
13         mov ss,ax
14         mov ax,0b800H
15         mov es,ax           
16         mov bx,0780h
17         mov bp,10h
18         mov cx,3
19 
20 s0:     push cx
21         mov cx,10h
22         mov si,003ch
23         mov di,0
24 
25 s1:     mov al,ds:[di]        
26         mov es:[bx+si],al
27         mov al,ds:[bp]
28         mov es:[bx+si+1],al
29         add si,2
30         inc di
31         loop s1
32          
33         inc bp
34         add bx,00a0h
35         pop cx
36         loop s0
37 
38         mov ax,4c00h
39         int 21h
40 code ends
41 end start

运行结果如下:

总结与体会

这次实验我学会了多重循环的使用以及如何将数值以字符的形式输出,同时也掌握了源变址寄存器si,di的使用。

当然实验中还有很多问题其实也是似懂非懂,希望以后的学习中能理解吧。

posted @ 2018-12-08 16:43  Gemini小纯洁  阅读(149)  评论(0编辑  收藏  举报