实验二 多个逻辑段的汇编源程序编写与调试

任务一:

1-1

1.DS=076A  SS=076B  CS=076C

2.data =X-2;stack=X-1.

1-2

 

 

 

  1. DS=076A ;SS=076B;CS=076C
  2. Data =X-2; stack =X-1;

1-3

 

 

   

1.DS=076A ;SS=076C;CS=076E

2.Data =X-4; stack =X-2;

1-4

 

 

 

  1. DS=076C;SS=076E;CS=076A
  2. Data =X+2; stack =X+4;

1-5

  1.N

  2.task1_4可以正常运行

 

任务二:

assume cs:code
code segment
start:
    mov ax,0b800h
    mov ds,ax
    
    mov bx,0f00h
    mov cx,50h
    mov ax,0403h
s:    mov ds:[bx],ax
    add bx,2
    loop s

    mov ah,4ch
    int 21h
code ends
end start

 

 

 

任务三

  assume cs:code
  data1 segment
      db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers
  data1 ends
  
  data2 segment
      db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0       ; ten numbers
  data2 ends
  
 data3 segment
     db 16 dup(0)
 data3 ends
 
 code segment
 start:
     mov ax,data1
     mov ds,ax
     mov bx,0
     mov cx,0ah
 s:    mov  ax,ds:[bx]
     add   ax,ds:[bx+10h]
     mov ds:[bx+20h],ax
     inc bx
     loop s
     mov ah,4ch
     int 21h
 code ends
 end start

相加前:

 

 执行后:

 

任务五

 

 db 5 dup(2)  字体变为绿色

 db 5 dup(5)  字体变为紫色

 

 

任务六

assume cs:code, ds:data

data segment
    db 'Pink Floyd      '
    db 'JOAN Baez       '
    db 'NEIL Young      '
    db 'Joan Lennon     '
data ends

code segment
start:
      mov ax,data
    mov ds,ax    
    mov ax,data
    mov es,ax
    
    mov bx,0
    mov cx,4
s1:    mov si,cx
    mov cx,4
s2:    mov al,es:[bx]
    or al,20h
    mov es:[bx],al
    inc bx
    loop s2
        
    mov cx,si
    mov bx,0
    mov ax,es
    inc ax
    mov es,ax
    loop s1

    mov ah, 4ch
    int 21h
code ends
end start

执行前

 执行后:

 

任务七

 1 assume cs:code, ds:data, es:table
  2 
  3 data segment
  4     db '1975', '1976', '1977', '1978', '1979'   
  5     dd  16, 22, 382, 1356, 2390                
  6     dw  3, 7, 9, 13, 28                      
  7 data ends
  8 
  9 table segment
 10     db 5 dup( 16 dup(' ') )     
 11 table ends
 12 
 13 code segment
 14 start:
 15     mov ax, data
 16     mov ds, ax
 17     mov ax, table
 18     mov es, ax
 19 
 20 ; 1.把年份放入每行开头
 21     mov bx, 0   
 22     mov si, 0   
 23     mov di, 0   
 24     mov cx, 5  
 25 year:  
 26    
 27     mov dx, cx  
 28     mov cx, 4   
 29 yearnum:  
 30     
 31     mov al, byte ptr ds:[di]    
 32     mov byte ptr es:[bx][si], al
 33     inc si         
 34     inc di        
 35     loop yearnum 
 36     
 37 
 38     mov cx, dx      
 39     add bx, 10h    
 40     mov si, 0       
 41     loop year
 42  
 43     mov bx, 0      
 44     mov si, 5      
 45     mov cx, 5      
 46 income:
 47   
 48     mov ax, word ptr ds:[di]
 49     mov word ptr es:[bx][si], ax
 50     add si, 2
 51     add di, 2
 52     mov ax, word ptr ds:[di]
 53     mov word ptr es:[bx][si], ax
 54     add si, 2
 55     add di, 2               
 56 
 57     add bx, 10h     
 58     mov si, 5       
 59     
 60     loop income
 61 
 62 
 63     mov bx, 0       
 64     mov si, 0Ah     
 65     mov cx, 5      
 66 employee: 
 67     
 68     mov ax, word ptr ds:[di]
 69     mov word ptr es:[bx][si], ax
 70     add si, 2
 71     add di, 2
 72     
 73     add bx, 10h    
 74     mov si, 0Ah   
 75 
 76     loop employee
 77 
 78 
 79     mov bx, 0       
 80     mov si, 5      
 81     mov cx, 5      
 82 average:
 83     
 84     mov ax, word ptr es:[bx][si]
 85     add si, 2
 86     
 87     mov dx, word ptr es:[bx][si]
 88     add si, 3       
 89     div word ptr es:[bx][si]
 90     add si, 3       ;
 91     
 92     mov word ptr es:[bx][si], ax
 93     
 94     add bx, 10h    
 95     mov si, 5      
 96     loop average
 97 
 98 
 99     mov ah, 4ch
100     int 21h
101 code ends
102 end start

 

 执行后

 

 

总结

本次实验的完成需要掌握loop指令中寄存器间数据的转存,理清楚每一次寄存器跳过的地址数。

使用debug工具对程序进行调试,使用g命令一次性执行到程序返回前.

posted on 2021-11-08 19:37  楚之南冥灵  阅读(85)  评论(2)    收藏  举报