关于汇编指令的一些问题 ..

先看下代码DATASEGMENTBUFDB50DB?DB50DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAKEY_INPRO... 先看下代码
DATA SEGMENT
BUF DB 50
DB?
DB 50 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
KEY_IN PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
LEA DX,BUF
MOV AH,0AH
INT 21H
..
..
RET
KEY_IN ENDP
CODE ENDS
END KEY_IN
中间没什么信息,不是疑问的重点 ...就没写。
这里面的 PROC FAR 是什么意思?什么时候才用到它?
还有后面接下来的PUSH DS 为什么在开始的地方将DS压栈呢?而且后面也没有POP操作啊 ...
展开
 我来答
做而论道
高能答主

2013-04-03 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
程序的前面,有两次 PUSH,这是和后面的 RET 配套的。
(RET 含有 POP 的功能。)
这样做,是为了可以正常的结束程序,返回 DOS 操作系统。
PROC FAR,也是为了达到这个目的而写的一部分。

这三部分的写法,是固定的,使用微软的操作系统,就应该这样写。
----
后期,随着微软的DOS 的升级,结束程序时,也可以写成:

MOV AH, 4CH
INT 21H

这两句即可。
百度网友6dc5d8b
2013-04-03 · TA获得超过721个赞
知道小有建树答主
回答量:390
采纳率:100%
帮助的人:276万
展开全部
PROC 是函数(子程序 or 过程 好多种说法)定义的关键字(伪指令)
FAR是 过程的 属性
相应的还有NERR属性,NEAR表示近,FAR表示远
区别就是 FAR属性的过程能被不同的段调用而NEAR只能在该段被调用(细节上是分配的这个函数名的存储空间大小不一样,NEAR是8位,FAR是16位,16位即可寻址到整个1M物理内存,故能在不同的段间调用)

有push 不一定要有pop
ret 指令做的过程是pop ip
pop ds

懂意思没?
意思是 ret的时候 程序转到DS:0的地方去执行了(那个0 是上面push进去的ax,值为0)

DS:0 这个地方存着数据CD20 对应的汇编代码是 int 20H

这条哦指令跟 MOV AH, 4CH
INT 21H
效果一样 都可以用了结束程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式