저는 명령 집합과 내부를 배우기 위해 x86 입출력에서 텍스트 기반 게임을 작성하기 위해 기본 입출력을 수행하는 방법을 알고 싶습니다.텍스트 기반 작업을 위해 어셈블리 IO가 어떻게 수행됩니까?
printf
과 같은 복잡한 내용이 포함되어 있지 않으면또는 stdio.h
을 내 어셈블리 코드에 사용하고 싶지 않습니다. 그런 다음 어셈블리에서 호출해야합니다.
가능한 경우 열거 형 및 구조체를 에뮬레이트하는 방법을 배우고 싶습니다. AFAIK 함수를 작성하고 매개 변수를 전송하는 것은 특정 레지스터를 스택으로 밀어 넣거나 튕기거나 또는 esp
을 4의 배수로 조작하는 경우 일뿐입니다.
intel 구문을 사용하여 x86에서 어떻게합니까?
죄송합니다
업데이트, 나는 대상을 지정하는 것을 잊었다 - 나는 리눅스를 사용하고 있습니다.
예제 코드 - 간결함을 위해 생략 기능 프로토 타입 구현 리눅스 응용 프로그램에
#include <stdio.h>
#include <stdlib.h>
typedef enum __weapon_type__ {
weapon_type_sword = 1,
weapon_type_spear = 2,
weapon_type_knife = 3
} weapon_type;
typedef struct __weapon__ {
unsigned int damage;
char* name;
weapon_type type;
} weapon;
weapon* weapon_create(int damage, char* name, weapon_type type);
void putline(const char* msg);
int main(int argc, char** argv)
{
unsigned int weapon_selection, weapon_damage;
weapon_type weptype;
weapon* player_weapon = NULL;
char* weapon_name = NULL;
putline("Choose your weapon type:\t");
putline("(1) Sword");
putline("(2) Spear");
putline("(3) Knife");
while (weapon_selection > 3 || weapon_selection < 1)
{
scanf("%u", &weapon_selection);
switch(weapon_selection)
{
case 1:
weptype = weapon_type_sword;
break;
case 2:
weptype = weapon_type_spear;
break;
case 3:
weptype = weapon_type_knife;
break;
default:
putline("ERROR! Please select options 1 - 3\t");
break;
}
}
/*do the same thing for weapon_damage and weapon_name, etc.
Then ask for player name, type of character, blah blah blah.
*/
player_weapon = weapon_create(weapon_damage, weapon_name, weptype);
return 0;
}
C 코드를 ASM으로 컴파일하고 보려고 했습니까? –
그 생각은 유일한 문제는 구현의 관점에서 코드의 IO 측면 (필자가 틀린 경우가 아니라면)을 다루지 않는다는 것입니다. 즉, C 라이브러리에 대한 extern 호출을 수행하지 않을까요? – zeboidlund
IO는 플랫폼에 종속적입니다. 궁극적으로 코드는 Linux/DOS/Windows/다른 대상에 따라 다르므로 OS 기능을 호출해야합니다. 기본적으로 텍스트를 출력하는 OS 함수를 배우고 Asm에서 OS 함수를 호출하는 방법을 배워야 할 필요가있는 것처럼 보입니다. 정확히 대상을 지정하면 다른 사람이 질문에 대답 할 수있게됩니다. –