사칙연산을 하기 위해서 먼저 input을 받을 수 있어야한다

GET_DEC : al에 1바이트를 입력받는다(DEC - 10 진법으로)
PRINT_DEC : al을 1바이트 출력한다 (DEC - 10 진법으로)
.bss section을 보면 num 이라는 변수를 선언해 놓았다. 위에서 GET_DEC 1, num을 통해 1바이트를 num에 입력 받았다.
INPUT 칸을 보면 순서대로 1, 2를 입력 받았고 이는 al에 1, num에 2를 저장한다.
그리고 PRINT_DEC를 통해 순서대로 출력하였다.
NEWLINE : 줄바꿈

add 함수는 더하기 연산을 하는 함수이다.
add a, b = (a = a+b) a와 b를 더하여 a에 저장한다.
a, b는 레지스터 or 메모리를 선택할 수 있으나 둘다 메모리는 안된다
위 그림을 보면 add al, 1 = (al=al + 1) = (al = 1+1) 이된다. Output에 2가 정상적으로 출력된 것을 확인할 수 있다.

[22:08:33] The program crashed! Execution time: 1.659 s 에러가 발생했다. 이유는 num은 주소을 얘기하고 있지 특정 값을 얘기하지 않기 때문이다. 이를 해결하기 위해서는 앞서 배운 []를 해주면 된다.

REF :
각 조합별 더하기가 정상적으로 빌드가 되는 모습.

메모리 + 메모리 - 빌드에러


sub 함수를 쓴다는 것 외에는 전부 add와 동일하다.

곱하기는 우리가 생각하는 것 처럼 단순하게 진행되지 않는다. 두개의 위치를 저장하는게 아닌 al 위치에 있는 값과 곱하게 된다. 그리고 결과 값은 한단계 상위 비트에 저장되게 된다.

나누기는 곱하기보다 더하다. 하드웨어는 소수점을 저장할 수 없는 구조이기 때문이다. 곱하기와 비슷하게 진행되지만 몫과 나머지로 저장하게 된다.
ah 출력시 발생하는 에러는 PRINT_DEC가 어셈블리에서 공식적으로 제공하는 기능이 아닌 SASM에서 편의를 위해 제공하는 매크로여서 오는 한계라고만 알 수 있었다.
오늘은 여기까지
강의에서 곱하기와 나누기는 이런 구조로 움직이는구나 정도만 이해하고 넘어가면 된다고 한다. 덧셈과 뺄셈이 더 중요하다고 한다. 이에 대한 이유를 또 찾아봐야할거 같다.