2
0
Эх сурвалжийг харах

Adapted inline assembly code

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7684 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 жил өмнө
parent
commit
593eff7977

+ 19 - 26
source/Generic.Linux.AMD64.Glue.Mod

@@ -144,18 +144,11 @@ VAR
 
 	PROCEDURE {NOPAF} putc*(file: ADDRESS; c: CHAR);
 	CODE
-		PUSH ECX
-		MOV EAX, 4
-		MOV EBX, [ESP + 12]
-		LEA ECX, [ESP+8]	
-		MOV EDX, 1
-		INT 80H
-		POP ECX
-		JNE fail
-		MOV EAX, [ESP + 4]
-		RET
-		fail:
-		MOV EAX, -1
+		MOV EAX, 1
+		MOV RDI, [RSP + 16]
+		LEA RSI, [RSP + 8]
+		MOV RDX, 1
+		SYSCALL
 		RET
 	END putc;
 
@@ -193,20 +186,20 @@ VAR
 	PROCEDURE {INITIAL,NOPAF} Init0;
 	BEGIN
 		(*initial stack layout:
-			argc at esp
-			argv at esp+4
-			0 at esp+4+argc*4
-			env at esp+4+argc*4+4      =   (2+argc)<<2 + esp*)
-		CODE{SYSTEM.i386}
-			MOV EAX, [ESP]
-			MOV argc, EAX
-			LEA EAX, [ESP+4]
-			MOV argv, EAX
-			MOV EAX, [ESP]
-			ADD EAX, 2
-			SHL EAX, 2
-			ADD EAX, ESP
-			MOV environ, EAX
+			argc at rsp
+			argv at rsp+8
+			0 at rsp+8+argc*8
+			env at rsp+8+argc*8+8      =   (2+argc)<<3 + rsp*)
+		CODE{SYSTEM.AMD64}
+			MOV RAX, [RSP]
+			MOV argc, RAX
+			LEA RAX, [RSP+8]
+			MOV argv, RAX
+			MOV RAX, [RSP]
+			ADD RAX, 2
+			SHL RAX, 3
+			ADD RAX, RSP
+			MOV environ, RAX
 		END;
 		Init;
 	END Init0;