OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_010 / chnos / emu86asm.nas
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/emu86asm.nas b/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/emu86asm.nas
new file mode 100644 (file)
index 0000000..e70cb54
--- /dev/null
@@ -0,0 +1,60 @@
+[FORMAT "WCOFF"]\r
+[INSTRSET "i486p"]\r
+[BITS 32]\r
+[FILE "nasfunc0.nas"]\r
+\r
+       GLOBAL  _asm_Emulator_x86_Get_EFlags_Compare\r
+       GLOBAL  _asm_Emulator_x86_Get_EFlags_Increment\r
+       GLOBAL  _asm_Emulator_x86_Get_EFlags_XOR\r
+       GLOBAL  _asm_Emulator_x86_Get_EFlags_Decrement\r
+       GLOBAL  _asm_Emulator_x86_Get_EFlags_Subtract_with_Borrow\r
+\r
+[SECTION .text]\r
+\r
+_asm_Emulator_x86_Get_EFlags_Compare:\r
+       mov     eax, [esp + 4]\r
+       cmp     eax, [esp + 8]\r
+       pushfd\r
+       pop     eax\r
+       ret\r
+\r
+_asm_Emulator_x86_Get_EFlags_Increment:\r
+       mov     eax, [esp + 4]\r
+       inc     eax\r
+       pushfd\r
+       pop     eax\r
+       ret\r
+\r
+_asm_Emulator_x86_Get_EFlags_XOR:\r
+       mov     eax, [esp + 8]\r
+       xor     [esp + 4], eax\r
+       pushfd\r
+       pop     eax\r
+       ret\r
+\r
+_asm_Emulator_x86_Get_EFlags_Decrement:\r
+       mov     eax, [esp + 4]\r
+       dec     eax\r
+       pushfd\r
+       pop     eax\r
+       ret\r
+\r
+_asm_Emulator_x86_Get_EFlags_Subtract_with_Borrow:\r
+       mov     edx, [esp + 4]\r
+       xor     eax, eax\r
+       mov     ax, [edx]\r
+       cmp     dword[esp + 12], 1\r
+       jne     asm_Emulator_x86_Get_EFlags_Subtract_with_Borrow_CF0\r
+asm_Emulator_x86_Get_EFlags_Subtract_with_Borrow_CF1:\r
+       stc\r
+       jmp     asm_Emulator_x86_Get_EFlags_Subtract_with_Borrow_DO\r
+asm_Emulator_x86_Get_EFlags_Subtract_with_Borrow_CF0:\r
+       clc\r
+asm_Emulator_x86_Get_EFlags_Subtract_with_Borrow_DO:\r
+       sbb     ax, [esp + 8]\r
+       mov     [edx], eax\r
+       pushfd\r
+       pop     eax\r
+       ret\r
+\r
+\r