标签:tar code csharp 开始 ber def arp 程序加载 end
(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。
程序加载后,code段的段地址为x,则data段的段地址为x-2,stack段的段地址为x-1。
在任意一个段中,程序加载之后,该段实际占有空间是(N除以16向下取余再加1)*16
(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,ds=076d,ss=076e
练习三的代码中code若设code段的段地址为x,那么data段的段地址为x+3,stack段的段地址为x+4
(4)
实验3能正常执行。因为前两个是数据段开头,而第三个是以指令开头,去掉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
标签:tar code csharp 开始 ber def arp 程序加载 end
原文地址:https://www.cnblogs.com/jgxdbk/p/10015922.html