问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

汇编中把数据段和代码段定义在同一段内有好处么?19

发布网友 发布时间:2023-09-22 18:42

我来回答

1个回答

热心网友 时间:2024-11-15 18:39

好处是能让编译出来的程序节省几个字节的大小,另外能让你在写源码的时候少打几个字,因为不用弄数据段了嘛,不过在写大程序的时候最好是把数据段和代码段分开,因为那样更清晰.当然如果你认为把数据和代码放在一起更清晰的话,你可以坚持自己的性格

恩,这个位置是非常讲究的

第一:在代码段中定义的数据不能定义到CS:IP可能碰到的地方,因为变量一旦被CS:IP碰到的话,就会把数据当成指令执行了.CPU很生气,后果很严重.例子:

正确的定义:
code segment
var01 db 64
start:
mov ax,cx
mov ds,ax
mov al,var01
mov ax,4C00H
int 21H
;也可以把"var01 db 64"放在这行里,放在这里的话上面定义的数据就不能要了
;CPU在执行完int 21H之后CS:IP就飘到别的地方去了,所以不会执行到这里
code ends

错误的定义:
code segment
start:
mov ax,cx
mov ds,ax
var01 db 64 ;CPU在执行的时候会光顾这里,所以不能定义在这里
mov al,var01
mov ax,4C00H
int 21H
code ends

第二:数据最好是定义在代码段的最前面或者最后面,让代码段的一部分是数据,一部分是代码,不然你如果一会是数据,一会是代码的话,看源码的人会很生气的.但这条可能有例外的情况,例子:
code segment
start:
mov ax,cx
mov ds,ax
jmp OMG
var01 db 64 ;前一条指令会让CS:IP指向下面的那条指令
;如果你认为这样很美的话可以这么干
OMG:
mov al,var01
mov ax,4C00H
int 21H
code ends

宏定义定义在哪我不知道有什么影响,不过一般好像都是定义在程序开头的
子程序定义在start前面或者
mov ax,4C00H
int 21H ;(也就是程序返回代码)
后面都一样
也可以通过前面那个例子里,用jmp弄出一段不会直接执行的空间,这样:
code segment
var01 db 64
start:
mov ax,cx
mov ds,ax
jmp OMG1
OMG2:
mov al,var01
ret
OMG1:
call OMG2
mov ax,4C00H
int 21H
code ends

我感觉这种方法非常2,其实子程序应该放在一起,像这样:
code segment
var01 db 64
start:
mov ax,cx
mov ds,ax
call OMG1
call OMG2
mov ax,4C00H
int 21H
OMG1:
mov al,var01
ret
OMG2:
xor al,al
ret
code ends
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 汇编语言中定义的数据段的问题54 梦见爸爸穿脏衣服是啥意思1 鲁智深的人物简介318 怎样才可以和坏孩子分开 一个好孩子突然想做个坏孩子,这是什么心理 做一个坏孩子和一个好学生,在本质上有什么区别么?。不过是不同... 在Word2003中添加水印的方法 ...X、Y、Z三种元素的常见单质在常温常压下都是 上海南站汽车站出发到绍兴的车停靠站是在绍兴客运中心还是绍兴... 我想问问各位医生,过度手淫引起的无菌慢性前列腺炎,如何治愈?尿频,夜... 活佛济公里边胭脂用绝情魔刀伤了李修缘在第几集 和平精英amr可以用awm皮肤吗 胭脂绝情魔刀在哪一集 魏大勋在综艺中遭到父母的催婚,当父母催婚时,自己该怎么应对? 美国五大军种排名?(海、陆、空、陆战队、海岸警卫队)69 开了固话没弄座机打电话能打通吗 固定电话能打过去吗? 怎么把别人的注销? gtx1070比gtx780oc性能高多少?2 沈阳什么时候变成直辖市?朝阳会变成辽宁的省会吗? 1.现在是 “中国需要世界,世界也需要中国;中国需要了解世界,世界也需 ... 厨房卫生间装修用多少三角阀及其它阀门呢?1 内存单元定义 为数据段,是如何定义,又是如何划分段的呢?3 索泰GTX1070-8GD5 X-GAMING OC怎么样,...1 职高读护理有用吗 魏大勋因为父母催婚而生气,他是找不到合适的还是不想找?6 魏大勋被父母催婚,当代年轻人面对父母催婚应该是什么态度?4 怎么玩转支付宝中的答答星球活动 索尼RX10M4 朋友说是长焦,请问它的焦段具体是多少啊? 古墓丽影9白金需要多久? 梦见别人穿脏衣服8 北京C语言培训机构哪个好1 北京有哪些好的小语种培训学校? 索泰GTX1070至尊PLUS OC这款显卡性能怎样?索泰显... 问个正经的:北京英语培训机构哪家比较好 哪些星座男生最爱“笨”女孩 模拟人生3怎么修改特征48 一个手机号注册了两个,如何切换? 坎巴拉太空计划1.0.4生涯模式怎么把飞船组建的限制数量增加? 活佛济公中胭脂的武器是什么?