首页
社区
课程
招聘
[求助]请教关于汇编程序的问题
发表于: 2007-4-10 16:27 4869

[求助]请教关于汇编程序的问题

2007-4-10 16:27
4869
TITLE        A08DISAR (EXE)        Display all ASCII character set
STACK        SEGMENT        PARA        STACK        'Stack'
        DB        64 DUP(?)
STACK        ENDS
DATASEG        SEGMENT        PARA        'Data'
ASCHAR        DB        00,'$'
DATASEG ENDS
.286
CODESEG        SEGMENT        PARA        'Code'
A10MAIN        PROC        FAR
ASSUME        SS:STACK,DS:DATASEG,CS:CODESEG
        MOV        AX,CODESEG
        MOV        DS,AX
        CALL        B10SCREEN
        CALL        C10CURSOR
        CALL        D10DISPLY
        MOV        AX,4C00H
        INT        21H

A10MAIN ENDP
B10SCREEN        PROC        NEAR
       
        PUSHA
        MOV        AX,0600H
        MOV        BH,07
        MOV        CX,0000
        MOV        DX,184FH
        INT        10H
        POPA
        RET

B10SCREEN ENDP
C10CURSOR        PROC        NEAR
       
        PUSHA
        MOV        AH,02H
        MOV        BH,00
        MOV        DX,0800H
        INT        10H
        POPA
        RET

C10CURSOR ENDP
D10DISPLY        PROC        NEAR
       
        PUSHA
        MOV        CX,256
        LEA        DX,ASCHAR
D20:        CMP        ASCHAR,08H
        JB        D30
        CMP        ASCHAR,0DH
        JBE        D40
D30:        MOV        AH,09H
        INT        21H
D40:        INC        ASCHAR
        LOOP        D20
        POPA
        RET

D10DISPLY ENDP
CODESEG        ENDS
        END        A10MAIN

TITLE        A08DISAR (EXE)        Display all ASCII character set
        .MODEL        SMALL
        .STACK        64
        .DATA
ASCHAR        DB        00,'$'
.286
        .CODE
A10MAIN        PROC        FAR
        MOV        AX,@data
        MOV        DS,AX
        CALL        B10SCREEN
        CALL        C10CURSOR
        CALL        D10DISPLY
        MOV        AX,4C00H
        INT        21H

A10MAIN ENDP
B10SCREEN        PROC        NEAR
       
        PUSHA
        MOV        AX,0600H
        MOV        BH,07
        MOV        CX,0000
        MOV        DX,184FH
        INT        10H
        POPA
        RET

B10SCREEN ENDP
C10CURSOR        PROC        NEAR
       
        PUSHA
        MOV        AH,02H
        MOV        BH,00
        MOV        DX,0800H
        INT        10H
        POPA
        RET

C10CURSOR ENDP
D10DISPLY        PROC        NEAR
       
        PUSHA
        MOV        CX,256
        LEA        DX,ASCHAR
D20:        CMP        ASCHAR,08H
        JB        D30
        CMP        ASCHAR,0DH
        JBE        D40
D30:        MOV        AH,09H
        INT        21H
D40:        INC        ASCHAR
        LOOP        D20
        POPA
        RET

D10DISPLY ENDP
        END        A10MAIN
以上是两个汇编程序,作用是在屏幕上显示ASCII字符(跳过了08H到0DH之间的)。前一个用的是完整段定义,后一个用的是简易段定义,不过为什么后一个程序能正常打出字符,而前一个却打出一堆乱码?请问前一个程序哪错了,与后一简易段定义等价的完整段定义应该怎样写?
编译环境:RadASM2.2.0.7带的MASM
另外,问一下FAR和NEAR的区别。
望高手指教,谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 240
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己回一下,避免沉了,有谁帮帮我呀。
2007-4-11 16:02
0
游客
登录 | 注册 方可回帖
返回
//