| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 530 人关注过本帖
标题:求大神指教,汇编运行程序出错
只看楼主 加入收藏
lyloog
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-11-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
求大神指教,汇编运行程序出错
本来,在学校电脑上运行时可以得到完整的结果,但是,回到家用win7的本本运行时就显示THE NTVDM CPU has encountered an illegal instrution,后面还显示一串cs,ip等值。程序是求输入输入一串字符,再输入一个字符x,通过长调用的方式,求出字符x的个数。源代码如下:

DATA    SEGMENT
STRN    DB    50
N    DB    0
    DB    50 DUP(?)
M    DB    00H
AA    DB    0AH,0DH,'$'
DATA    ENDS
STACK1    SEGMENT    STACK
    DB    100 DUP(?)
STACK1    ENDS
CODE    SEGMENT
    ASSUME    DS:DATA,CS:CODE
START:    MOV    AX,DATA
    MOV     DS,AX
    LEA    DX,STRN
    MOV    AH,0AH
    INT    21H
    LEA    DX,AA
    MOV    AH,09
    INT    21H
    MOV    AH,01H
    INT    21H
    PUSH    AX
    LEA    DX,AA
    MOV    AH,09
    INT    21H


   
    LEA    SI,STRN
    ADD    SI,02H
    MOV    CL,N
    MOV    DL,M
    PUSH    SI
    PUSH    CX
   
    PUSH    DX
    CALL    FAR PTR TJGS
    POP    DX
    MOV    M,DL

   
    LEA    DX,AA
    MOV    AH,09
    INT    21H
    POP    AX
    MOV    DL,AL
    MOV    AH,02H
    INT    21H

    LEA    SI,M
    MOV    AL,[SI]
    CALL    HEXASC
    MOV    AH,4CH
    INT    21H




HEXASC  PROC    NEAR       ;定义子程序为近过程(同一代码段)
        MOV     DL,AL      ;通过寄存器AL,把主程序的参数
                           ;(两位16进制数XY)送到子程序         
    PUSH    CX         ;保存计数器当前值(SHR要用CL)
        MOV     CL,4       ;设移位4次
        SHR     DL,CL      ;移位后,DL=0X
        POP     CX         ;恢复计数器当前值
        PUSH    AX         ;保存XY
        CMP     DL,9       ;16进制数X与9比较
        JBE     NEXT       ;小于或等于9,转NEXT
        ADD     DL,7       ;大于9,先加7
NEXT:   ADD     DL,30H     ;再加30H. 小于等于9,只加30H
        MOV     AH,2       ;已把X转换为ASCII码,
        INT     21H        ; 调DOS 2号功能在屏幕上显示X
        POP     AX         ;恢复AX内的XY
        MOV     DL,AL      ;DL=XY
        AND     DL,0FH     ;DL=0YH
        CMP     DL,9       ;Y与9比较
        JBE     NEXT1      ;小于等于9,转NEXT1
        ADD     DL,7       ;大于9,先加7
NEXT1:  ADD     DL,30H     ;再加30H.小于等于9,只加30H
                          
        MOV     AH,2       ;显示Y  
        INT     21H
        RET                 ;返回主程序
HEXASC  ENDP
CODE    ENDS

CODE1    SEGMENT
    ASSUME    CS:CODE1
TJGS    PROC    FAR
    POP    BP
    POP    DX
    POP    CX
    POP    SI
    POP    AX
    PUSH    AX
AS1:    MOV    BL,[SI]
    CMP    AL,BL
    JNE    AS2
    INC    SI
    INC    DL
    LOOP    AS1
AS2:    INC    SI
    LOOP    AS1
    PUSH    DX
    PUSH    BP
    RET
TJGS    ENDP
CODE1    ENDS
    END    START     

   
搜索更多相关主题的帖子: win7 运行程序 源代码 
2012-11-15 13:17
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
win7下能运行16位程序???

DO IT YOURSELF !
2012-11-15 13:33
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
xp的飘过

梅尚程荀
马谭杨奚







                                                       
2012-11-16 00:04
lyloog
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2012-11-15
收藏
得分:0 
win7有办法吗?各位大神,求指教,指教?????
2012-11-17 21:35
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
win7下应该没办法的 除非你用虚拟机装个dos

DO IT YOURSELF !
2012-11-18 09:00
浏览浏览嘎嘎
Rank: 1
等 级:新手上路
帖 子:7
专家分:3
注 册:2012-11-23
收藏
得分:0 
菜鸟飘过
2012-11-27 10:09
快速回复:求大神指教,汇编运行程序出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018221 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved