回 帖 发 新 帖 刷新版面

主题:5555  学了几周汇编了  还是没有入门(已经解决)

汇编真的是很难入门啊  都开了几周课了 还是一点都不懂  希望大家帮我解释一些入门级别的问题

代码段是这样的 

DATA   SEGMENT
BUF    DB 'HOW ARE YOU!'
DATA   ENDS


其中数据段有个句子是这样

LEA DX,BUF

请大家解释一下 这两个句子  主要是代码段那个

回复列表 (共38个回复)

31 楼

看了那么多大虾的解释,我发现我又多懂了一点了  谢谢大家.

32 楼

DATA不叫代码段,应该是数据段;你看的汇编书上的代码段是应该是CODE
LEA DX,BUF是将BUF变量的偏移地址送入DX中,LEA是传送偏移地址指令,它与MOV的区别在于MOV是传送内容而LEA是传送偏移地址

33 楼

ding ding 

34 楼

呵呵.讨论得这么热闹,,我也给大家发个东西..


;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 楼

真的是太好了,我也获益非浅,
最好再能有这样类似的帖子上来
可以让我们初级的人学学,也能看得懂

36 楼

楼上的,你就没有一本像样的汇编书。这些东东查一下就知道了。唉。。。
看你的签名还蛮有个性的嘛!

37 楼

[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 楼

MOV   AH,4CH
INT   21H   
这个在汇编中就是exit 0  退出的意思 他们是相等的 可以互换的

“MOV   AH,9  这个有什么用呢?” 这个是调用DOS的9号中段 也就是输出一串字符

“DB       200 DUP(0)
这是重复定义200个数据0   每个0占一个字节 ? 是这样吗?
这段代码有什么用    为什么这个地方是200? ” 这里的200是随便写的 只要这个长度大于你哪个字符串的长度就可以了~
就是先分配一个地址空间,来存放你的那些字符

我来回复

您尚未登录,请登录后再回复。点此登录或注册