标签: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,8a1 endsb1 segment db 1,2,3,4,5,6,7,8b1 endsc1 segment db 0,0,0,0,0,0,0,0 c1 endscode segmentstart: mov bx,0 mov dx,0 mov cx,8s: mov dx,0 mov ax,a1 mov ds,ax add d1,[bx] mov ax,c1 mov ds,ax mov [bx],dl inc bxloop smov ax,4c00hint 21h code endsend start


标签:tar code csharp 开始 ber def arp 程序加载 end
原文地址:https://www.cnblogs.com/jgxdbk/p/10015922.html