主题:5555 学了几周汇编了 还是没有入门(已经解决)
风一般的女孩
[专家分:50] 发布于 2006-12-15 12:00:00
汇编真的是很难入门啊 都开了几周课了 还是一点都不懂 希望大家帮我解释一些入门级别的问题
代码段是这样的
DATA SEGMENT
BUF DB 'HOW ARE YOU!'
DATA ENDS
其中数据段有个句子是这样
LEA DX,BUF
请大家解释一下 这两个句子 主要是代码段那个
回复列表 (共38个回复)
沙发
风一般的女孩 [专家分:50] 发布于 2006-11-17 15:36:00
啊 没有人帮我解释啊 。。。。。。。。。。
请大家帮帮我啊
BUF DB 'HOW ARE YOU!'
这句话是什么意思 啊
板凳
zyxdna [专家分:1250] 发布于 2006-11-17 15:54:00
代码段开始,结尾都是SEGMENT和ENDS
例如:
DataSegment SEGMENT
Message DB ‘Hello !’
DataSegment ENDS
中间一句的意思是将字符串'HOW ARE YOU!'赋给BUF,或将‘Hello !’赋给Message
LEA DX,BUF
是将BUF的地址写入DX
3 楼
胡永亮hyl [专家分:10] 发布于 2006-11-17 16:30:00
顶
4 楼
风一般的女孩 [专家分:50] 发布于 2006-11-17 16:53:00
谢谢zyxdna兄的解释 但我的问题不是这个
我知道是将字符串'HOW ARE YOU!'赋给BUF
主要是DB 这个DB 书上面的解释是 定义字节类型,其后每个操作数都占有一个字节
这是什么意思 难道是'HOW ARE YOU!' 这句话定义为一个字节的大小并且赋值给BUF?? 是这样吗
5 楼
zyxdna [专家分:1250] 发布于 2006-11-17 17:18:00
主要是DB 这个DB 书上面的解释是 定义字节类型,其后每个操作数都占有一个字节
这是什么意思 难道是'HOW ARE YOU!' 这句话定义为一个字节的大小并且赋值给BUF?? 是这样吗
HOW ARE YOU!
这里指的是H占一个字节,O占一个字节,以此类推,W占一个字节,空格占一个字节
它是将这个字符串的地址传入BUF,
所以BUF就是一个字节类型的指针量
晕,我怎么说到C语言了
不知道你有没有学过C语言呢
在C语言中
int表示字节类型
int BUF="HOW ARE YOU!"
和这就是同样的意思
BUF里的值就是H
BUF+1里的值就是O
BUF+2里的值就是W
6 楼
天空未蓝 [专家分:360] 发布于 2006-11-17 21:53:00
这里还涉及到寻址方式方面的知识
不知道LZ学了没?
"……",引号内的东西表示的是字符串。在内存中是以字节存放的。
建议LZ去看看基础的东西
还有LEA是汇编指令。最好也顺便去熟悉下指令系统,这对学习汇编有好处。
7 楼
风一般的女孩 [专家分:50] 发布于 2006-11-18 00:50:00
再次谢谢你的答复 我没学过C语言的
听你的意思好象BUF 是 H这个字节的地址 然后下一个地址单元是O字节 再下一个地址单元是W字节 .......依次类推 是这样的吗
8 楼
风一般的女孩 [专家分:50] 发布于 2006-11-18 00:52:00
寻址方便的知识 我都在书上面看了几遍了 但总感觉到了实际的例子当中就看不出来了 兄弟能帮我解释下吗 就这个当作例子 谢谢!!
9 楼
zyxdna [专家分:1250] 发布于 2006-11-18 09:29:00
[quote]再次谢谢你的答复 我没学过C语言的
听你的意思好象BUF 是 H这个字节的地址 然后下一个地址单元是O字节 再下一个地址单元是W字节 .......依次类推 是这样的吗[/quote]
是的
这些知识各种语言都是相似或一致的
10 楼
风一般的女孩 [专家分:50] 发布于 2006-11-18 20:37:00
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
BUF DB 'HOW ARE YOU!'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX
LEA DX,BUF
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
这个就是我的教科书上面的例子
我看不懂 但我知道这个是生成EXE程序的源程序格式
堆栈段为什么要下面这句话呢?
DB 200 DUP(0)
这是重复定义200个数据0 每个0占一个字节 ? 是这样吗?
这段代码有什么用 为什么这个地方是200?
MOV AX,DATA
MOV DS,AX
这个是把数据段的地址送给DS吧 我在书上面看了 数据段和附加段需要这样
MOV AH,9 这个有什么用呢?
还有
MOV AH,4CH
INT 21H 这个是结束程序的代码吧 但这个代码之前也有一个INT 21H
这又有什么用呢
哎 一下子问了这么多问题有点乱 请你帮我解释下好吗? 谢了
我来回复