기본 문법

어셈블리어 mrmov는 memory -> register 이런 느낌의 문법... (AT&T 문법)
ollydbg나 x64dbg에서 mov eax, ecx 는 eax에 ecx를 넣는 것과 의미가 반대이다. (인텔 문법)

ia32의 jmp dest 주소가 pc-relative 주소인것과 달리, y86에서는 direct 주소이다. 예) 0x00400010
특이한 점은 add, sub로 모든 사칙연산을 수행하고, 논리연산을 and, xor로 전부 처리한다... nand나 nor이 있으면 모든 논리를 만들 수 있으므로 and, xor이면 가능할 것 같긴 하다.
곱하기는 더하기 여러번 한다 치고, 나누기는 어떤 식으로 되는거지..?


과제 1.
1. 아래의 C-프로그램 statement들을 Y86 어셈블리 코드로 변환하라 :
if (max >= 10) max--; // max는 register 라고 가정(메모리 접근 불필요)
else max++;
답:
max가 eax라고 가정
if문은 조건을 역으로 생각하는게 if-else 순으로 나열돼서 보기 편하다는 것 같다
# max 변수를 eax로 가정
irmovl $10, %ebx # ebx = 10 (상수 10 저장)
irmovl $1, %ecx # ecx = 1 (상수 1 저장)
# if (max >= 10)
rrmovl %eax, %edx # edx = eax (비교용 임시 레지스터)
subl %ebx, %edx # edx -= 10
jl ElseBlock # eax < 10이면 ElseBlock으로 점프
# then
subl %ecx, %eax # eax--
jmp End
ElseBlock:
addl %ecx, %eax # eax++
End:
2. 아래의 C-프로그램 statement들을 Y86 어셈블리 코드로 변환하라 :
int sum1(int x) {
count = 10;
do {
x += count;
count--;
} while (count);
return (x);
}
답:
일단 함수니까 push %ebp, rrmov %esp, %ebp 로 시작하고 끝날때는 반대로... 함수 리턴값은 eax
# int sum1(int x)
pushl %ebp
rrmovl %esp, %ebp
mrmovl 8(%ebp), %eax # x를 %eax에 저장
# 변수 및 상수 초기화
irmovl $10, %ebx # count = 10
irmovl $1, %ecx # ecx = 1 (상수 1 저장)
LoopStart:
addl %ebx, %eax # x += count
subl %ecx, %ebx # count--
jg LoopStart # count > 0이면 LoopStart로 점프
# return
rrmovl %ebp, %esp
popl %ebp
ret
3. 아래의 C-프로그램 statement들을 Y86 어셈블리 코드로 변환하라 :
int sum2(int x) {
count = 10;
while (count) {
x += count;
count--;
}
return (x);
}
답:
# int sum2(int x)
pushl %ebp
rrmovl %esp, %ebp
mrmovl 8(%ebp), %eax # x를 %eax에 저장
# 변수 및 상수 초기화
irmovl $10, %ebx # count = 10
irmovl $1, %ecx # ecx = 1 (상수 1 저장)
# while (count > 0)
andl %ebx, %ebx # count가 0인지 확인
jle EndLoop # count <= 0이면 EndLoop로 점프
LoopStart:
addl %ebx, %eax # x += count
subl %ecx, %ebx # count--
jg LoopStart # count > 0이면 LoopStart로 점프
EndLoop:
# return
rrmovl %ebp, %esp
popl %ebp
ret
변수는 레지스터에 저장해서 연산한다고 가정했다.
ppt에 eax, ebx 로 표현되어 있어서 4바이트로 가정했는데 특정 슬라이드에서는 rax, rbx로 되어있는 곳도 있어서 과제 작성할 때 주의가 필요할 것 같다.
'학교 수업 > 컴퓨터아키텍쳐' 카테고리의 다른 글
| 컴아 중간고사 정리 (0) | 2026.04.27 |
|---|---|
| 컴퓨터하드웨어 기말정리 (0) | 2025.06.05 |
댓글