实验4 8086标志寄存器及中断

任务一:

调试结果,成功完成数据段中128位相加

 line31-34的4条inc指令

不能替换为add指令

原因:使用add会导致进位寄存器CF的值发生变化。NC->CY;

而inc指令不会改变进位寄存器CF的值.

 

 

 

任务二:

运行结果:

 

 

 

 1.汇编指令代码line11-18,实现功能:

从键盘上读取输入的字符,并保存到ds:[si],每读入一个就判断是否为'#',如果是则不保存,转跳至标号next处执行;

如果不是则si + 1并继续读入下一个字符。

2.汇编指令代码line20-22,实现功能:

换行

3.汇编指令代码line24-30,实现功能:

打印'#'之前的输入内容

 

任务三:

运行结果:

 

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
assume ds:data, cs:code, ss:stack
data segment   
    x dw 91,792,8536,65535,2021,0
    len equ $ - x
data ends
stack segment
    dw 8 dup(?)
stack ends
code segment
start:   
    mov ax, data
    mov ds, ax 
    mov ax, stack
    mov ss, ax
    mov sp, 16    
    mov cx, len/2
print:
    mov ax, word ptr ds:[di]     
    add di, 2                
    push cx          
    call printNumber  
    call printSpace        
    pop cx           
    loop print       
    mov ah, 4ch   
    int 21h
printNumber:   
    mov bx, 0        
s1:    
    mov bp, 10    
    mov dx, 0     
    div bp       
    push dx    
    inc bx    
    mov cx, ax     
    inc cx        
    loop s1 
    mov cx, bx       
s2:       
    pop dx        
    add dl, 30h    
    mov ah, 2         
    int 21h   
    loop s2    
    ret
printSpace:   
    mov ah, 2   
    mov dl, 20h   
    int 21h   
    ret
code ends
end start

 

 

任务四:

 运行结果:

 

 

 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
assume cs:code,ds:data
 
data segment
 
    str db "assembly language, it's not difficult but tedious"
 
len equ $ - str
 
data ends
 
stack segment   
 
    db 8 dup(?)
 
stack ends
 
code segment
 
start:    
 
    mov ax, data   
 
    mov ds, ax   
 
    mov si, 0   
 
    mov cx, len      
 
    call strupr       
 
    call printStr 
 
    mov ax, 4c00h   
 
    int 21h
strupr :       
 
    push cx   
 
    push si       
 
transform:       
 
    mov al, ds:[si]
 
    cmp al, 97 
 
    jl continue  
 
    cmp al, 122 
 
    jg continue   
 
    and al, 0dfh   
 
    mov ds:[si], al
 
continue:       
 
    inc si        
 
    loop transform
 
    pop si   
 
    pop cx      
 
    ret       
 
printStr:   
 
    push cx  
 
    push si    
print:   
 
    mov ah, 2       
 
    mov dl, ds:[si]       
 
    int 21h       
 
    inc si   
 
    loop print    
 
    pop si         
     
    pop cx   
 
    ret          
 
code ends
 
end start  

  

任务五:

 

 

 该代码功能:

判断输入字符是否为7

是;在屏幕右侧输出yes

否;在屏幕右侧输出no

任务六:

运行结果:

 

posted on 2021-12-12 21:52  楚之南冥灵  阅读(24)  评论(2)    收藏  举报