实验四

任务一:

调试结果,成功完成数据段中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,实现功能:

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

 

任务三:

运行结果:

 

代码:

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

 

 

任务四:

 运行结果:

 

 

 代码:

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 @ 2021-12-12 13:03  九世狼  阅读(68)  评论(1)    收藏  举报