簡體   English   中英

異常程序終止turbo c

[英]abnormal program termination turbo c

我正在嘗試運行一個調用匯編過程的C組合代碼,並且收到異常程序終止消息。 它的代碼很簡單,匯編程序掃描一個數字並將結果返回給c。

;main code
#include<stdio.h>
extern long getPnum();
int main()
{
    long x;
    x = getPnum();
    printf("%d", x);
    return 0;
}


;getPNum
.MODEL SMALL
.STACK 100H
.DATA
NUM DD 0

.CODE
.386
PUBLIC _getPnum
_getPnum PROC NEAR

PUSH BP
MOV BP,SP
PUSH EAX
PUSH EBX
PUSH ECX
MOV EBX,10

SCAN:
        MOV EAX,NUM
        MUL EBX
        MOV ECX,EAX
        XOR EAX,EAX
        MOV AH,1
        INT 21H
        CMP AL,13
        JE NEXT
        SUB AL,'0'
        MOV AH,0
        ADD ECX,EAX
        MOV NUM,ECX
        JMP SCAN
NEXT:
MOV AX,WORD PTR NUM
MOV DX,WORD PTR NUM+2
ADD SP,14
RET
_getPnum ENDP
END

我將%d更改為ld% ,現在又遇到另一個錯誤: Dimdie error當運行DEBUGER時,我通過AX DX返回該數字,而X卻得到了錯誤的值調試器 結果 ,這很奇怪。


我變了

ADD SP,14
RET

ADD SP,12
POP BP
RET

現在我沒有任何錯誤,但是盡管返回值通過DX:AX是正確的,但打印值還是不正確

退出程序時, 必須恢復BP

更改

ADD SP,14
RET

ADD SP,12
POP BP
RET

更好的是:

MOV SP, BP
POP BP
RET

順便說一句:為什么您要推送一堆在功能結束時未還原的寄存器?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM