我试图运行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是正确的,但打印值还是不正确
答案 0 :(得分:1)
BP
必须在退出过程时恢复。
更改
ADD SP,14
RET
到
ADD SP,12
POP BP
RET
更好的是:
MOV SP, BP
POP BP
RET
顺便说一句:为什么您要推送一堆在功能结束时未还原的寄存器?