任务一

1.1

 1 assume ds:data, cs:code, ss:stack
 2 data segment
 3 db 16 dup(0) ; 预留16个字节单元,初始值均为0
 4 data ends
 5 stack segment
 6 db 16 dup(0) ;预留16个字节单元,初始值均为0
 7 stack ends
 8 code segment
 9 start:
10 mov ax, data
11 mov ds, ax
12 mov ax, stack
13 mov ss, ax
14 mov sp, 16 ; 设置栈顶
15 mov ah, 4ch
16 int 21h
17 code ends
18 end start

 

 

 

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = _076A___, 寄存器(SS) = __076B__, 寄存器(CS) = 076C____ ② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-2____, stack的段地址是__X-1__。

1.2

 1 assume ds:data, cs:code, ss:stack
 2 data segment
 3 db 4 dup(0) ; 预留4个字节单元,初始值均为0
 4 data ends
 5 stack segment
 6 db 8 dup(0) ;预留8个字节单元,初始值均为0
 7 stack ends
 8 code segment
 9 start:
10 mov ax, data
11 mov ds, ax
12 mov ax, stack
13 mov ss, ax
14 mov sp, 8 ; 设置栈顶
15 mov ah, 4ch
16 int 21h
17 code ends
18 end start

 

 

 

 

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = _076A___, 寄存器(SS) = __076B__, 寄存器(CS) = 076C____ ② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-2____, stack的段地址是__X-1__。

1.3

 1 assume ds:data, cs:code, ss:stack
 2 data segment
 3 db 20 dup(0) ; 预留20个字节单元,初始值均为0
 4 data ends
 5 stack segment
 6 db 20 dup(0) ;预留20字节单元,初始值均为0
 7 stack ends
 8 code segment
 9 start:
10 mov ax, data
11 mov ds, ax
12 mov ax, stack
13 mov ss, ax
14 mov sp, 20; 设置栈顶
15 mov ah, 4ch
16 int 21h
17 code ends
18 end start

 

 

 

 

 

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = _076A___, 寄存器(SS) = __076C_, 寄存器(CS) = 076E____ ② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-4____, stack的段地址是__X-2__。

 

1.4

 1 assume ds:data, cs:code, ss:stack
 2 code segment
 3 start:
 4 mov ax, data
 5 mov ds, ax
 6 mov ax, stack
 7 mov ss, ax
 8 mov sp, 20
 9 mov ah, 4ch
10 int 21h
11 code ends
12 data segment
13 db 20 dup(0)
14 data ends
15 stack segment
16 db 20 dup(0)
17 stack ends
18 end start

 

 

 

 

 

 

 

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = _076C___, 寄存器(SS) = __076E_, 寄存器(CS) = 076A____ ② 假设程序加载后,code段的段地址是X,则,data段的段地址是X+2____, stack的段地址是__X+4_。

实验任务2

 1 assume cs:code
 2 code segment
 3     mov ax,0b800H
 4     mov ds,ax
 5     mov ax,80
 6     mov cx,ax
 7     mov bx,0f00H
 8 s:    mov byte ptr ds:[bx],3H
 9     inc bx
10     mov byte ptr ds:[bx],4H
11     inc bx
12     loop s
13     
14     mov ax,4c00h
15     int 21h
16 code ends
17 end

 

 

 两种方法实验结果相同,均无法修改,推测修改位置为只读存储器。

1.5

① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 _N/16 向上取整___。

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

 task1_4可以,其余程序不知道程序入口,task1_4在头部所以默认能够执行。

实验任务3

 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 data2 segment
 6 db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0 ; ten numbers
 7 data2 ends
 8 data3 segment
 9 db 16 dup(0)
10 data3 ends
11 code segment
12 start:
13 mov ax,data1
14 mov ds,ax
15 mov bx,0
16 mov cx,10
17 
18 s:
19 mov ax,[bx]
20 mov ax,[bx+16]
21 mov [bx+32],ax
22 inc bx
23 loop s
24 
25 mov ah, 4ch
26 int 21h
27 code ends
28 end start

 

 

任务4

 1 assume cs:code
 2 data1 segment
 3 dw 2, 0, 4, 9, 2, 0, 1, 9
 4 data1 ends
 5 data2 segment
 6 dw 8 dup(0)
 7 data2 ends
 8 code segment
 9 start:
10  
11 mov cx,8
12 mov ax,data1
13 mov dx,ax
14 mov bx,0
15 s:
16 mov ax,[bx]
17     push ax
18     inc bx
19     inc bx
20 loop s
21 mov cx,8
22 s1:
23     pop [bx]
24     inc bx
25     inc bx
26 loop s
27 mov ah, 4ch
28 int 21h
29 code ends
30 end start

 

 

 

 

 

 

 

 

 任务5

 1 assume cs:code, ds:data
 2 data segment
 3 db 'Nuist'
 4 db 2, 3, 4, 5, 6
 5 data ends
 6 code segment
 7 start:
 8 mov ax, data
 9 mov ds, ax
10 mov ax, 0b800H
11 mov es, ax
12 mov cx, 5
13 mov si, 0
14 mov di, 0f00h
15 s: mov al, [si]
16 and al, 0dfh
17 mov es:[di], al
18 mov al, [5+si]
19 mov es:[di+1], al
20 inc si
21 add di, 2
22 loop s
23 mov ah, 4ch
24 int 21h
25 code ends
26 end start

 

 

 

 

line 19 :大小写转换

 

更改后颜色发生变化,推测为更改颜色

任务六

 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: mov al,[bx]
17    or al,20H
18    mov [bx],al
19    add bx,16
20    loop s
21    mov ah, 4ch
22    int 21h
23 code ends
24 end start

 

 

 

 

 

 

 任务7

 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 
20     mov bx, 0
21     mov bp, 0
22     mov cx, 5
23 years:
24     mov ax, ds:[bx]
25     mov es:[bp], ax
26     mov ax, ds:[bx+2]
27     mov es:[bp+2], ax
28     add bx, 4
29     add bp, 10h
30 loop years
31 
32     mov bp, 5
33     mov cx, 5
34 income:
35     mov ax, ds:[bx]
36     mov es:[bp], ax
37     add bx, 2
38     add bp, 10h
39 loop income
40 
41     mov cx, 5
42     mov bp, 10
43 people:
44     mov ax, ds:[bx]
45     mov es:[bp], ax
46     add bx, 2
47     add bp, 10h
48 loop people
49 
50     mov cx, 5
51     mov bp, 5
52 average:
53     mov ax, es:[bp]
54     mov bl, es:[bp+5]
55     div bl
56     mov es:[bp+8], al
57     add bp,10h
58 loop average
59 
60     mov ah, 4ch
61     int 21h
62 code ends
63 end start

 

posted on 2021-11-09 09:12  落叶千藩  阅读(45)  评论(5编辑  收藏  举报