Skip to content

Instantly share code, notes, and snippets.

@theahmadzai
Last active May 16, 2019 16:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theahmadzai/52c329b281336103dc8c724bbb4a1e01 to your computer and use it in GitHub Desktop.
Save theahmadzai/52c329b281336103dc8c724bbb4a1e01 to your computer and use it in GitHub Desktop.
GCC CALLING CONVENTION
.MODEL SMALL
.STACK 100H
.DATA
.CODE
PROC MAIN
MOV AX, @DATA
MOV DS, AX
PUSH 1 ; SS:BP+6 (a)
PUSH 2 ; SS:BP+4 (b)
CALL ADD_NUMBERS
MOV DX, AX ; SS:BP+2 (return address)
ADD DX, 48
MOV AH, 2
INT 21H
MOV AH, 4CH
INT 21H
ENDP
PROC ADD_NUMBERS
;PROLOGUE
PUSH BP ; SS:BP (local stack frame)
MOV BP, SP
;SAVE REGISTERS
PUSH SI ; SS:BP-2
PUSH DI ; SS:BP-4
PUSH BX ; SS:BP-6
; LOCAL VARIABLE
SUB SP, 2 ; SS:BP-8 (c)
; CALCULATE ; a = b+c
MOV BX, SS:BP+6 ; (mov a to bx)
ADD BX, SS:BP+4 ; (add b to bx)
MOV SS:BP-8, BX ; (mov bx to c)
; RETURN
MOV AX, SS:BP-8 ; (save return value c to ax)
; CLEAN VARIABLES
ADD SP, 2 ; (delete local variable)
;RESTORE REGISTERS
POP BX
POP DI
POP SI
;EPILOGUE
MOV SP, BP ; (reset base frame)
POP BP
RET
END MAIN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment