异常程序终止turbo c

时间:2018-09-10 09:44:42

标签: c assembly

我试图运行C的组合代码,该代码调用汇编程序,但出现异常程序终止消息。 它的代码非常简单,汇编过程将扫描一个数字并将结果返回给c。

let today = Date() // OR your date here
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: today)
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: today)

我将;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% 当我运行DEBUGER时,我会通过AX DX返回该数字,而X则得到了错误的值 debugger result scrren


我改变了

Dimdie error

ADD SP,14
RET

现在我没有任何错误,但是尽管返回值通过DX:AX是正确的,但打印值还是不正确

1 个答案:

答案 0 :(得分:1)

BP 必须在退出过程时恢复。

更改

ADD SP,14
RET

ADD SP,12
POP BP
RET

更好的是:

MOV SP, BP
POP BP
RET

顺便说一句:为什么您要推送一堆在功能结束时未还原的寄存器?