注册 登录
编程论坛 汇编论坛

关于汇编一些概念有点模糊,望解答

diaolingle 发布于 2011-12-11 12:26, 736 次点击
cpu执行程序,程序返回前,返回前到底是什么意思?
程序加载后又是什么意思,是指程序执行到了int 21h这个位置吗?
7 回复
#2
zaixuexi2011-12-11 13:34
不论是返回前,加载后,这个要看具体上下文(context),你问题没描述清楚, 我猜想你的意思是想问
.model tiny
.code
main proc far
start:
    xor ax,ax
    push ds
    push ax
    ret           ;这句执行之前都叫做返回前,不一定是ret,int21h也可(所以要看具体上下文,到底是进程,还是中断)
    main endp
    end start
一个程序的加载是由加载器来完成的,可执行文件从磁盘加载到内存的过程可以叫加载,一旦加载器完成了从磁盘文件到内存的过程,之后的对于该进程的读写都可以叫加载后的读写
#3
diaolingle2011-12-11 18:39
回复 2楼 zaixuexi
关于加载是不是单纯把可执行文件加载到内存里面,然后执不执行指令呢。王爽的书上有一道题是问程序加载后cs,ds,ss中各自的值,要是前者的话,就是直接r命令后就把值写出来,要是后者的话,就要执行完后再写出此时的cs它们的值吧
#4
zaixuexi2011-12-11 19:16
你怎么会想成是后者,后者还叫加载么,加载啊,就是由加载器给个初值,和执行没关系吧...
#5
diaolingle2011-12-11 19:40
回复 4楼 zaixuexi
原题是这样的:设程序加载完后,code段的段地址为X,则data段的段地址为(  ),stack段的段地址为(  )。
然后答案就是X-2和X-1。可是要是不执行的话就没有这样的结果咯,好像是执行到mov 4c00h才会出现这样的结果啊,不知道是不是答案错了。
#6
diaolingle2011-12-11 19:45
回复 4楼 zaixuexi
程序我大概写下
assume  cs:code,ds:data, ss:stack
data segment
dw................(一些数据)
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,stack
      .........(中间这些指令其实不影响)
      mov 4c00h
      int 21h
      code ends
end start
#7
zaixuexi2011-12-11 20:12
看来你是没明白我说的话.
程序代码:
assume  cs:code,ds:data, ss:stack
data segment
    db ?
data ends
stack segment
    db ?
stack ends
code segment
start:
      mov ax, data
      mov bx, stack
      mov cx, code
      mov ax, 4c00h
      int 21h
code ends
end start
data,stack,code是加载器完成初始话的,你要通过r命令当然是通过赋值给寄存器看咯,这和执行没关系的,初始化是初始data,stack,code,你却只看ds,ss,cs,你有没有看清楚题目?code段的段地址为X,则data段的段地址为(  ),stack段的段地址为(  ),他有问你ds,ss,cs?你就没读懂题目

#8
diaolingle2011-12-11 20:26
回复 7楼 zaixuexi
懂了,谢谢
1