实验五
1)
//编译链接,用r查看寄存器内容
//在ds:0100h处查看定义的内容
mov ax,stack
mov ss,ax
mov sp,16
//直到这3个指令执行完毕,此时stack数据段被指定为了栈结构,sp指针指向了栈顶,ss发生改变。
mov ax,data
mov ds,ax
push ds:[0]
//栈中存储了01 23这2个数据
push ds:[2]
//04 56被存入
//执行完所有程序后再用r查看寄存器的值
//书上习题
2)(具体做法和1)相同,就不再详细分析)
3)
4)
//如果不指名程序的入口,并且使用end替换end start,只有(3)题中程序可以正确的执行但是三道题都可以运行(因为只有它是在内存中可执行代码在最前面)。
因为如果不指名程序入口,程序会从进内存的第一个单元起开始执行,前二个题中,定义的是数据,但CPU还是将数据当做指令代码执行了。
5)
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5,6,7,8
b ends
c1 segment ;
db 8 dup(0)
c1 ends ;
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov es,ax
mov bx,0
mov cx,8
s:
mov dl, [bx]
add dl, es:[bx]
push ds
mov ax, c1
mov ds, ax
mov [bx], dl
pop ds
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
dw 8 dup(0)
b ends
code segment
start:
mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,16
mov bx,0
mov cx,8
s:
push ds:[bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start