任务1
1-1
1.
assume ds:data, cs:code, ss:stack
data segment
db 16 dup(0)
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 16
mov ah, 4ch
int 21h
code ends
end start
1).在debug中将执行到line17结束、line19之前时,
Ds=076C
SS=076D
CS=076E
2).
data段的地址是X-2
stack的段地址是X-1
1.2
1.
assume ds:data, cs:code, ss:stack
data segment
db 4 dup(0)
data ends
stack segment
db 8 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 8
mov ah, 4ch
int 21h
code ends
end start
1).在debug中将执行到line17结束、line19之前时,
Ds=076C
SS=076D
CS=076E
2).
data段的地址是X-2
stack的段地址是X-1
实验1.3
assume ds:data, cs:code, ss:stack
data segment
db 20 dup(0)
data ends
stack segment
db 20 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 20
mov ah, 4ch
int 21h
code ends
end start
1).在debug中将执行到line17结束、line19之前时,
Ds=076C
SS=076E
CS=0770
2).
data段的地址是X-4
stack的段地址是X-2
1.4
assume ds:data, cs:code, ss:stack
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 20
mov ah, 4ch
int 21h
code ends
data segment
db 20 dup(0)
data ends
stack segment
db 20 dup(0)
stack ends
end start
1).在debug中将执行到line9结束、line11之前时,
Ds=076E
SS=07700
CS=076C
2).
data段的地址是X+2
stack的段地址是X+4
1.5
1.
16
2.
\
只有task1_4.asm可以正确执行。
因为只有task1_4.asm在内存中可执行代码在最前面,不指名入口,cpu会把定义的数据也当成指定代码执行了。
任务2
assume cs:code
code segment
mov ax, 0b800h ;目标空间的段地址
mov ds, ax
mov ax, 0403H
mov bx, 0f00h
mov cx, 80 ;循环80次
s: mov ds:[bx], ax ;将ax的数据送入b800:bx
add bx, 2 ;一次性写入两个所以bx+2,也可以写两个inc bx
loop s
mov ax, 4c00h
int 21h
code ends
end
虽然效果一样但是用b指令的时候却发现结果不同
任务3
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 ax,data2
mov es,ax
mov bx,0
mov cx,10
s1: mov al,es:[bx]
add ds:[bx],al
inc bx
loop s1
mov ax ,data3
mov es,ax
mov bx,0
mov cx,10
s2: mov al,ds:[bx]
mov es:[bx],al
inc bx
loop s2
mov ah, 4ch
int 21h
code ends
end start
data1对应的内存空间数据原始值为076C:0000
data2对应的内存空间数据原始值为076C:0010
data3对应的内存空间数据原始值为076C:0020
相加前
相加后
任务4
执行前
data1对应的内存空间数据原始值为076C:0000
data1对应的内存空间数据原始值为076C:0010
执行后
确实反转了
任务5
assume cs:code, ds:data
data segment
db 'Nuist'
db 2, 3, 4, 5, 6
data ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, 0b800H
mov es, ax
mov cx, 5
mov si, 0
mov di, 0f00h
s: mov al, [si]
and al, 0dfh
mov es:[di], al
mov al, [5+si]
mov es:[di+1], al
inc si
add di, 2
loop s
mov ah, 4ch
int 21h
code ends
end start
line 19 的作用是对字母进行大写化
将【si】与11101111B进行逻辑与运算从而得到大写字母
改成db 5 dup(2)时结果为
改成db 5 dup(5)时结果为
此处数值对应各个字母的颜色,改成db X dup(X)时就变成了单一颜色。
任务6
任务7
明天写明天写 猪脑过载了