دو تمرین زبان اسمبلی هست به شرح زیر:
۱-از عملگر Modulo یا باقیمانده برای پیاده سازی مسئله Collatz استفاده کنید. مقدار شروع باید به صورت متغیر توسط کاربر وارد شود و مقادیر میانی در هر مرحله در خروجی برنامه وارد شود. ورودی برنامه نیازی به بررسی ندارد و ما فرض میکنیم که برنامه با ورودی های بزرگتر از ۰ تغذیه شود.
نمونه ی کد که کار نمیکند:
INP
STA N
COLLATZ_LOOP LDA N
OUT
BRZ END
SUB ONE
BRZ END
LDA N
STA TEMP
CHECK_EVEN_ODD
LDA TEMP
SUB TWO
BRP CHECK_EVEN_ODD_CONT
ADD TWO
BRZ EVEN
BRA ODD
CHECK_EVEN_ODD_CONT STA TEMP
BRA CHECK_EVEN_ODD
LDA N
STA TEMP
DIVIDE_BY_TWO SUB TWO
BRP CONT_DIVIDE_BY_TWO
ADD TWO
LDA TEMP
SUB COUNTER
STA N
BRA COLLATZ_LOOP
CONT_DIVIDE_BY_TWO
STA TEMP
BRA DIVIDE_BY_TWO LDA N
ADD N
ADD N
ADD ONE
STA N
BRA COLLATZ_LOOP
END HLT
N DAT 0
TEMP DAT 0
ONE DAT 1
TWO DAT 2
COUNTER DAT 0
۲- برنامه ایی بنویسید که از کاربر تا زمانی که او ۰ را وارد کند درخواست ورودی میکند و بعد از وارد کردن ۰ جمع تمام اعداد ورودی را میدهد.
این برنامه را جوری ادامه دهید که وقتی مجموع اعداد وارده از ۹۹۹ بیشتر شد برنامه را پایان دهد و جواب مجموع را به صورت دو خروجی بیرون دهد برای مثال ۶۰۰+۶۰۰+۹۰۰=۲۱۰۰ خروجی اش به صورت دو عدد ۲ و ۱۰۰ خواهد شد که جداگانه نمایش داد میشود. برای قسمت اول این تمرین کد به این شکل است و نیاز به کد قسمت دوم تمرین هست:
INP
BRZ END
STA TEMP
LDA TEMP
ADD SUM
STA SUM
LOOP INP
BRZ END
STA TEMP
LDA TEMP
ADD SUM
STA SUM
BRA LOOP
END LDA SUM
OUT
HLT
TEMP DAT 0
SUM DAT 0
نکته: تمامی این برنامه ها باید روی این شبیه ساز اجرا شده و خروجی درستی را نشان دهند:
https://www.peterhigginson.co.uk/lmc
اپراتور های مجاز در این شبیه ساز به صورت زیر است:
https://www.peterhigginson.co.uk/lmc/help.html