主题:5555 学了几周汇编了 还是没有入门(已经解决)
风一般的女孩
[专家分:50] 发布于 2006-12-15 12:00:00
汇编真的是很难入门啊 都开了几周课了 还是一点都不懂 希望大家帮我解释一些入门级别的问题
代码段是这样的
DATA SEGMENT
BUF DB 'HOW ARE YOU!'
DATA ENDS
其中数据段有个句子是这样
LEA DX,BUF
请大家解释一下 这两个句子 主要是代码段那个
回复列表 (共38个回复)
31 楼
caihao618 [专家分:50] 发布于 2006-12-17 16:21:00
看了那么多大虾的解释,我发现我又多懂了一点了 谢谢大家.
32 楼
wenzhuo [专家分:170] 发布于 2006-12-18 22:58:00
DATA不叫代码段,应该是数据段;你看的汇编书上的代码段是应该是CODE
LEA DX,BUF是将BUF变量的偏移地址送入DX中,LEA是传送偏移地址指令,它与MOV的区别在于MOV是传送内容而LEA是传送偏移地址
33 楼
pizibai [专家分:0] 发布于 2007-01-09 11:55:00
ding ding
34 楼
fishingok [专家分:20] 发布于 2007-01-10 09:32:00
呵呵.讨论得这么热闹,,我也给大家发个东西..
;212ҳ.
CODESG SEGMENT PARA 'CODE'
ASSUME CS:CODESG
START: MOV AH,00
MOV AL,04H
INT 10H
MOV AH,0BH
MOV BH,00
MOV BL,01
INT 10H
MOV AH,0BH
MOV BH,01
MOV BL,00
INT 10H
MOV BX,00H
MOV CX,00
MOV DX,00
A50: MOV AH,0CH
MOV AL,BL
INT 10H
INC CX
CMP CX,160
JNE A50
MOV CX,00
INC BL
AND BL,03
INC DX
CMP DX,100
JNE A50
MOV AH,4CH
INT 21H
CODESG ENDS
END START
35 楼
公孙成 [专家分:1040] 发布于 2007-01-11 09:11:00
真的是太好了,我也获益非浅,
最好再能有这样类似的帖子上来
可以让我们初级的人学学,也能看得懂
36 楼
ouyang829 [专家分:280] 发布于 2007-01-16 13:57:00
楼上的,你就没有一本像样的汇编书。这些东东查一下就知道了。唉。。。
看你的签名还蛮有个性的嘛!
37 楼
feng2379 [专家分:0] 发布于 2007-01-18 13:43:00
[quote]
堆栈段为什么要下面这句话呢?
DB 200 DUP(0)
这是重复定义200个数据0 每个0占一个字节 ? 是这样吗?
这段代码有什么用 为什么这个地方是200? [/quote]
[color=0000FF]200是定义堆栈的大小,这个定义的意思是定义一个有200个字节大小的栈,其每个字节都赋值为0 [/color]
[quote]
MOV AX,DATA
MOV DS,AX
这个是把数据段的地址送给DS吧 我在书上面看了 数据段和附加段需要这样[/quote]
[color=0000FF]恩,这个是的,因为MOV 指令除源操作数是立即数情况外,两个操作数中必须有一个是寄存器,所以要用AX寄存器转一下[/color]
[quote]
MOV AH,9 这个有什么用呢?
还有
MOV AH,4CH
INT 21H 这个是结束程序的代码吧 但这个代码之前也有一个INT 21H
这又有什么用呢[/quote]
[color=0000FF]
INT 是个中断指令 21H是类型号
至于为什么要 MOV AH,9和MVO AH,4C可以去看一下DOS 系统功能调用(INT 21H)的表,一般在汇编书的后面都有的吧
MOV AH,9
INT 21H
完成的是字符串的显示,调用之前要把字符串的地址写入DX
而MOV AH,4CH 则是带返回码返回了
[/color]
38 楼
聚散缘 [专家分:90] 发布于 2007-01-18 20:26:00
MOV AH,4CH
INT 21H
这个在汇编中就是exit 0 退出的意思 他们是相等的 可以互换的
“MOV AH,9 这个有什么用呢?” 这个是调用DOS的9号中段 也就是输出一串字符
“DB 200 DUP(0)
这是重复定义200个数据0 每个0占一个字节 ? 是这样吗?
这段代码有什么用 为什么这个地方是200? ” 这里的200是随便写的 只要这个长度大于你哪个字符串的长度就可以了~
就是先分配一个地址空间,来存放你的那些字符
我来回复