1.
代码:
assume cs:code, ds:data, ss:stack
data segment
dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
data ends
stack segment
dw 0, 0, 0, 0, 0, 0, 0, 0
stack ends
code segment
start: mov ax,stack
mov ss, ax
mov sp,16
mov ax, data
mov ds, ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
data段中的数据为:
程序返回前,cs=076C,ss=076B,ds=076A
程序加载后,code段段地址为x,则data段的段地址为 x-2 ,stack段的段地址为 x-1
2
.assume cs:code, ds:data, ss:stack
data segment
dw 0123h, 0456h
data ends
stack segment
dw 0, 0
stack ends
code segment
start: mov ax,stack
mov ss, ax
mov sp,16
mov ax, data
mov ds, ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
data段中的数据为:
cs=076C ss=076B ds=076A
data段的段地址为x-2 stack段的段地址为x-1
3
assume cs:code, ds:data, ss:stack
code segment
start: mov ax,stack
mov ss, ax
mov sp,16
mov ax, data
mov ds, ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
data segment
dw 0123h, 0456h
data ends
stack segment
dw 0,0
stack ends
end start
data段的数据:
cs=076A ss=076E ds=076D
code段地址为x data段的段地址为x+3 stack段的段地址为x+4
4.
1和2不能正确执行 。(3)的data和stack都在code之后,它的ip为0,所以可以正确执行。
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
c segment ;
db 8 dup(0)
c ends ;
code segment
start:
;?
code ends
end start
5.
assume cs:code
a1 segment
db 1,2,3,4,5,6,7,8
a1 ends
b1 segment
db 1,2,3,4,5,6,7,8
b1 ends
c1 segment
db 0,0,0,0,0,0,0,0
c1 ends
code segment
start:
mov bx,0
mov dx,0
mov cx,8
s: mov dx,0
mov ax,a1
mov ds,ax
add d1,[bx]
mov ax,c1
mov ds,ax
mov [bx],dl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
6.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,b
mov ss,ax
mov sp,10h
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
逆序存储成功
不知道自己第三个data段数据所求内容对不对
通过多次尝试了解了三个寄存器cs,ss,ds这三个段的段地址之间的关系
知道了程序入口的使用