你才是咕咕咕呢

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.任务实验1

  • 任务1-1
    • task1_1.asm源码:
 1 assume ds:data, cs:code, ss:stack
 2 
 3 data segment
 4     db 16 dup(0)
 5 data ends
 6 
 7 stack segment
 8     db 16 dup(0)
 9 stack ends
10 
11 code segment
12 start:
13     mov ax, data
14     mov ds, ax
15 
16     mov ax, stack
17     mov ss, ax
18     mov sp, 16
19 
20     mov ah, 4ch
21     int 21h
22 code ends
23 end
    • 截图:

    • 问题回答:

      (1)在debug中执行到line17结束、line19之前,记录此时:寄存器(DS)=076A,寄存器(SS)=076B,寄存器(CS)=076C

   (2)假设程序加载后,code的段地址是X,则data段的段地址是X-2,stack的段地址是X-1。  

  • 任务1-2
    • task1_2.asm源码:
 1 assume ds:data, cs:code, ss:stack
 2 
 3 data segment
 4     db 4 dup(0)
 5 data ends
 6 
 7 stack segment
 8     db 8 dup(0)
 9 stack ends
10 
11 code segment
12 start:
13     mov ax, data
14     mov ds, ax
15 
16     mov ax, stack
17     mov ss, ax
18     mov sp, 8
19 
20     mov ah, 4ch
21     int 21h
22 code ends
23 end
    • 截图:

    • 问题回答:

      (1)在debug中执行到line17结束、line19之前,记录此时:寄存器(DS)=076A,寄存器(SS)=076B,寄存器(CS)=076C

      (2)假设程序加载后,code的段地址是X,则data段的段地址是X-2,stack的段地址是X-1。  

  • 任务1-3
    • task1_3.asm源码:
 1 assume ds:data, cs:code, ss:stack
 2 
 3 data segment
 4     db 20 dup(0)
 5 data ends
 6 
 7 stack segment
 8     db 20 dup(0)
 9 stack ends
10 
11 code segment
12 start:
13     mov ax, data
14     mov ds, ax
15 
16     mov ax, stack
17     mov ss, ax
18     mov sp, 20
19 
20     mov ah, 4ch
21     int 21h
22 code ends
23 end
    • 截图:

    • 问题回答:

       (1)在debug中执行到line17结束、line19之前,记录此时:寄存器(DS)=076A,寄存器(SS)=076C,寄存器(CS)=076E

    (2)假设程序加载后,code的段地址是X,则data段的段地址是X-4,stack的段地址是X-2。  

  • 任务1-4
    • task1_4.asm源码:
 1 assume ds:data, cs:code, ss:stack
 2 code segment
 3 start:
 4     mov ax, data
 5     mov ds, ax
 6 
 7     mov ax, stack
 8     mov ss, ax
 9     mov sp, 20
10 
11     mov ah, 4ch
12     int 21h
13 code ends
14 
15 data segment
16     db 20 dup(0)
17 data ends
18 
19 stack segment
20     db 20 dup(0)
21 stack ends
22 end
    • 截图:

    • 问题回答:  

      (1)在debug中执行到line17结束、line19之前,记录此时:寄存器(DS)=076C,寄存器(SS)=076E,寄存器(CS)=076A

      (2)假设程序加载后,code的段地址是X,则data段的段地址是X+2,stack的段地址是X+4。  

  • 任务1-5
    • 基于上述四个实验任务的实践、观察、总结并回答:

     (1)对于如下定义的段,程序加载后,实际分配给该段的内容空间大小是[N/16]*16(上取整)

1 xxx segment
2         db N dup(0)
3 xxx ends

     (2)如果将程序task1_1.asm,task1_2.asm,task1_3.asm,task1_4.asm中,伪指令end start改成end,哪一个程序仍然可以正确执行,结合实践观察得到的结论,分析,说明原因。

  答:只有task1_4.asm可以执行。将end start替换成end则意味着程序未指定开始位置,整个代码段(包括数据段)都被当做执行代码来执行,因此执行数据段中的数据自然会出错。

2.任务实验2

  • task2.asm汇编源代码:
 1 assume cs:code
 2 code segment
 3 start:     
 4     mov ax,0b800h
 5     mov ds,ax
 6     mov bx,0f00h
 7     mov cx,80
 8 p:  mov ds:[bx],0403h
 9     inc bx
10     inc bx
11     loop p
12 
13     mov ah,4ch
14     int 21h
15 code ends
16 end start
  • 截图:

3.任务实验3

  • task3.asm汇编源代码:
 1 assume cs:code
 2 data1 segment
 3     db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers
 4 data1 ends
 5 
 6 data2 segment
 7     db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0       ; ten numbers
 8 data2 ends
 9 
10 data3 segment
11     db 16 dup(0)
12 data3 ends
13 
14 code segment
15 start:
16     mov ax,data1
17     mov ds,ax
18     mov cx,16
19     mov bx,0
20 s:  mov al,ds:[bx]
21     add al,ds:[bx+16]
22     mov ds:[bx+32],al
23     inc bx
24     loop s
25 
26     mov ah,4ch
27     int 21h
28 code ends
29 end start
  • 截图:
    • 数据依次加强前截图:

    •  数据依次相加后截图:  

4.任务实验4

  • task4.asm汇编源代码:
 1 assume cs:code
 2 
 3 data1 segment
 4     dw 2, 0, 4, 9, 2, 0, 1, 9
 5 data1 ends 
 6 
 7 data2 segment
 8     dw 8 dup(?)
 9 data2 ends
10 stack segment
11     db 16 dup(0)
12 stack ends
13 code segment
14 start:
15     mov ax,data1
16     mov ds,ax
17     mov ax,stack
18     mov ss,ax
19     mov sp,16
20     mov bx,0
21     mov cx,8
22 s1:
23     push ds:[bx]
24     inc bx
25     inc bx
26     loop s1
27 
28     mov bx,16
29     mov cx,8
30 s2:
31     pop ds:[bx]
32     inc bx
33     inc bx
34     loop s2
35 
36     mov ah, 4ch
37     int 21h
38 code ends
39 end start
  • 截图:

5.任务实验5

  • task5.asm汇编源码:
 1 assume cs:code, ds:data
 2 data segment
 3         db 'Nuist'
 4         db 5 dup(2)
 5 data ends
 6 
 7 code segment
 8 start:
 9         mov ax, data
10         mov ds, ax
11 
12         mov ax, 0b800H
13         mov es, ax
14 
15         mov cx, 5
16         mov si, 0
17         mov di, 0f00h
18 s:      mov al, [si]
19         and al, 0dfh
20         mov es:[di], al
21         mov al, [5+si]
22         mov es:[di+1], al
23         inc si
24         add di, 2
25         loop s
26 
27         mov ah, 4ch
28         int 21h
29 code ends
30 end start
  • 运行结果截图:

  • line25执行之后,line27执行之前的截图:

  • 源代码中line19的作用:

  答:将所有小写字母转化为大写字母。

  • 源代码中data段line4的字节数据的用途:

  答:设置字体颜色。

6.任务实验6

  • task6.asm汇编源代码:
 1 assume cs:code, ds:data
 2 
 3 data segment
 4     db 'Pink Floyd      '
 5     db 'JOAN Baez       '
 6     db 'NEIL Young      '
 7     db 'Joan Lennon     '
 8 data ends
 9 
10 code segment
11 start:
12     mov ax,data
13     mov ds,ax
14     mov cx,4
15     mov bx,0
16 s:  
17     mov dx,cx
18     mov cx,4
19     mov si,0
20 p:
21     mov al,ds:[bx+si]
22     or al,00100000B
23     mov ds:[bx+si],al
24     inc si
25     loop p
26     
27     add bx,16
28     mov cx,dx
29     loop s
30 
31     mov ah, 4ch
32     int 21h
33 code ends
34 end start
  • 截图:

7.任务实验7

  • task7.asm汇编源代码:
 1 assume cs:code, ds:data, es:table
 2 
 3 data segment
 4     db '1975', '1976', '1977', '1978', '1979' 
 5     dw  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     mov si,0
20     mov di,0
21     mov bx,0
22     mov cx,5
23     mov sp,0
24 
25  s: mov ax,[si]
26     mov es:[di],ax
27     mov ax,[si+2]
28     mov es:[di+2],ax
29     mov ax,[bx+20]
30     mov es:[di+5],ax
31     mov dx,0
32     mov es:[di+7],dx
33     push cx
34     mov cx,[20+10+bx]
35     mov es:[di+10],cx
36     div cx
37     pop cx
38     mov es:[di+0dh],ax
39     add si,4
40     add di,16
41     add bx,2
42     loop s
43 
44     mov ah, 4ch
45     int 21h
46 code ends
47 end start
  • 截图:
    • table段原始数据信息截图:

    • 程序退出之前,table段对应的内存空间的截图:  

 

posted on 2021-11-07 21:10  你才是咕咕咕呢  阅读(47)  评论(3编辑  收藏  举报