ASSEMBLY LANGUAGE FOR X86 (MASM) Please use modify the code below, it is just a
ID: 3871922 • Letter: A
Question
ASSEMBLY LANGUAGE FOR X86 (MASM) Please use modify the code below, it is just a loop of 10 years
Use Butcher's algorithm to calculate Easter for the next ten years in x86 assembly language. Use the code below to start
TITLE MASM Template (main.asm)
; Description:
;
; Revision date:
INCLUDE Irvine32.inc
COMMA=2ch
.data
march BYTE "March ",0
april BYTE "April ",0
y DWORD 2017
a dWORD ?
b DWORD ?
cc DWORD ?
.code
main PROC
call Clrscr
mov ecx, 10
NEXT:
mov eax, y
call WriteDec
call crlf
inc eax
mov y, eax
dec ecx
jnz NEXT
mov edx,offset march
call WriteString
mov al, COMMA
call WriteChar
call CRLF
exit
main ENDP
END main
Explanation / Answer
C code for butucer alogoritm
#include<stdio.h>
// using namespace std;
int main()
{
int intyear,intEasterDate,intEasterMonth;
int a, b, c, d, e, f, g, h, i, j, k, m, p;
printf("What's the year? ");
scanf("%d",&intyear);
printf("Easter Month is ");
if (intyear<2018||intyear>2028)
{printf("This calculator cannot serve you ");
return -1;}
a=intyear%19;
b=intyear/100;
c=intyear%100;
d=b/4;
e=b%4;
f=(b+8)/25;
g=(b-f+1)/3;
h=((19*a)+b-d-g+15)%30;
i=c/4;
j=c%4;
k=(32+(2*e)+(2*i)-h-j)%7;
m=(a+(11*h)+(22*k))/451;
intEasterMonth=(h+k-(7*m)+114)/31;
p=(h+k-(7*m)+114)%31;
intEasterDate=p+1;
return 0;
}
Assembly code for butucher algorithm
.LC0:
.string "What's the year? "
.LC1:
.string "%d"
.LC2:
.string "Easter Month is "
.LC3:
.string "This calculator cannot serve you"
main:
push rbp
mov rbp, rsp
sub rsp, 64
mov edi, OFFSET FLAT:.LC0
call puts
lea rax, [rbp-64]
mov rsi, rax
mov edi, OFFSET FLAT:.LC1
mov eax, 0
call scanf
mov edi, OFFSET FLAT:.LC2
call puts
mov eax, DWORD PTR [rbp-64] ; year is eneterd where the easter year to be calculated
cmp eax, 2017 ; comparing whathere year is less than 2017
jle .L2
mov eax, DWORD PTR [rbp-64]
cmp eax, 2028 ;comparing year is greater than 2018 so that easte year clculated only for year between 2017 and 2018
jle .L3
.L2:
mov edi, OFFSET FLAT:.LC3
call puts
mov eax, -1
jmp .L5
.L3:
mov ecx, DWORD PTR [rbp-64]
mov edx, 1808407283
mov eax, ecx
imul edx
sar edx, 3
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-4], eax
mov edx, DWORD PTR [rbp-4]
mov eax, edx
sal eax, 3
add eax, edx
add eax, eax
add eax, edx
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-4], eax
mov ecx, DWORD PTR [rbp-64]
mov edx, 1374389535
mov eax, ecx
imul edx
sar edx, 5
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-8], eax
mov ecx, DWORD PTR [rbp-64]
mov edx, 1374389535
mov eax, ecx
imul edx
sar edx, 5
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-12], eax
mov eax, DWORD PTR [rbp-12]
imul eax, eax, 100
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-12], eax
mov eax, DWORD PTR [rbp-8]
lea edx, [rax+3]
test eax, eax
cmovs eax, edx
sar eax, 2
mov DWORD PTR [rbp-16], eax
mov eax, DWORD PTR [rbp-8]
cdq
shr edx, 30
add eax, edx
and eax, 3
sub eax, edx
mov DWORD PTR [rbp-20], eax
mov eax, DWORD PTR [rbp-8]
lea ecx, [rax+8]
mov edx, 1374389535
mov eax, ecx
imul edx
sar edx, 3
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-24], eax
mov eax, DWORD PTR [rbp-8]
sub eax, DWORD PTR [rbp-24]
lea ecx, [rax+1]
mov edx, 1431655766
mov eax, ecx
imul edx
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-28], eax
mov edx, DWORD PTR [rbp-4]
mov eax, edx
sal eax, 3
add eax, edx
add eax, eax
add edx, eax
mov eax, DWORD PTR [rbp-8]
add eax, edx
sub eax, DWORD PTR [rbp-16]
sub eax, DWORD PTR [rbp-28]
lea ecx, [rax+15]
mov edx, -2004318071
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 4
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-32], eax
mov eax, DWORD PTR [rbp-32]
imul eax, eax, 30
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-32], eax
mov eax, DWORD PTR [rbp-12]
lea edx, [rax+3]
test eax, eax
cmovs eax, edx
sar eax, 2
mov DWORD PTR [rbp-36], eax
mov eax, DWORD PTR [rbp-12]
cdq
shr edx, 30
add eax, edx
and eax, 3
sub eax, edx
mov DWORD PTR [rbp-40], eax
mov eax, DWORD PTR [rbp-20]
lea edx, [rax+16]
mov eax, DWORD PTR [rbp-36]
add eax, edx
add eax, eax
sub eax, DWORD PTR [rbp-32]
sub eax, DWORD PTR [rbp-40]
mov ecx, eax
mov edx, -1840700269
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 2
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-44], eax
mov edx, DWORD PTR [rbp-44]
mov eax, edx
sal eax, 3
sub eax, edx
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-44], eax
mov edx, DWORD PTR [rbp-32]
mov eax, edx
sal eax, 2
add eax, edx
add eax, eax
add edx, eax
mov eax, DWORD PTR [rbp-4]
add edx, eax
mov eax, DWORD PTR [rbp-44]
imul eax, eax, 22
lea ecx, [rdx+rax]
mov edx, 1218970763
mov eax, ecx
imul edx
sar edx, 7
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-48], eax
mov edx, DWORD PTR [rbp-32]
mov eax, DWORD PTR [rbp-44]
add edx, eax
mov eax, DWORD PTR [rbp-48]
mov ecx, eax
sal eax, 3
sub ecx, eax
mov eax, ecx
add eax, edx
lea ecx, [rax+114]
mov edx, -2078209981
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 4
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-52], eax
mov edx, DWORD PTR [rbp-32]
mov eax, DWORD PTR [rbp-44]
add edx, eax
mov eax, DWORD PTR [rbp-48]
mov ecx, eax
sal eax, 3
sub ecx, eax
mov eax, ecx
add eax, edx
lea ecx, [rax+114]
mov edx, -2078209981
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 4
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-56], eax
mov edx, DWORD PTR [rbp-56]
mov eax, edx
sal eax, 5
sub eax, edx
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-56], eax
mov eax, DWORD PTR [rbp-56]
add eax, 1
mov DWORD PTR [rbp-60], eax
mov eax, 0
.L5:
leave
ret.LC0:
.string "What's the year? "
.LC1:
.string "%d"
.LC2:
.string "Easter Month is "
.LC3:
.string "This calculator cannot serve you"
main:
push rbp
mov rbp, rsp
sub rsp, 64
mov edi, OFFSET FLAT:.LC0
call puts
lea rax, [rbp-64]
mov rsi, rax
mov edi, OFFSET FLAT:.LC1
mov eax, 0
call scanf
mov edi, OFFSET FLAT:.LC2
call puts
mov eax, DWORD PTR [rbp-64]
cmp eax, 2017
jle .L2
mov eax, DWORD PTR [rbp-64]
cmp eax, 2028
jle .L3
.L2:
mov edi, OFFSET FLAT:.LC3
call puts
mov eax, -1
jmp .L5
.L3:
mov ecx, DWORD PTR [rbp-64]
mov edx, 1808407283
mov eax, ecx
imul edx
sar edx, 3
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-4], eax
mov edx, DWORD PTR [rbp-4]
mov eax, edx
sal eax, 3
add eax, edx
add eax, eax
add eax, edx
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-4], eax
mov ecx, DWORD PTR [rbp-64]
mov edx, 1374389535
mov eax, ecx
imul edx
sar edx, 5
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-8], eax
mov ecx, DWORD PTR [rbp-64]
mov edx, 1374389535
mov eax, ecx
imul edx
sar edx, 5
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-12], eax
mov eax, DWORD PTR [rbp-12]
imul eax, eax, 100
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-12], eax
mov eax, DWORD PTR [rbp-8]
lea edx, [rax+3]
test eax, eax
cmovs eax, edx
sar eax, 2
mov DWORD PTR [rbp-16], eax
mov eax, DWORD PTR [rbp-8]
cdq
shr edx, 30
add eax, edx
and eax, 3
sub eax, edx
mov DWORD PTR [rbp-20], eax
mov eax, DWORD PTR [rbp-8]
lea ecx, [rax+8]
mov edx, 1374389535
mov eax, ecx
imul edx
sar edx, 3
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-24], eax
mov eax, DWORD PTR [rbp-8]
sub eax, DWORD PTR [rbp-24]
lea ecx, [rax+1]
mov edx, 1431655766
mov eax, ecx
imul edx
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-28], eax
mov edx, DWORD PTR [rbp-4]
mov eax, edx
sal eax, 3
add eax, edx
add eax, eax
add edx, eax
mov eax, DWORD PTR [rbp-8]
add eax, edx
sub eax, DWORD PTR [rbp-16]
sub eax, DWORD PTR [rbp-28]
lea ecx, [rax+15]
mov edx, -2004318071
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 4
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-32], eax
mov eax, DWORD PTR [rbp-32]
imul eax, eax, 30
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-32], eax
mov eax, DWORD PTR [rbp-12]
lea edx, [rax+3]
test eax, eax
cmovs eax, edx
sar eax, 2
mov DWORD PTR [rbp-36], eax
mov eax, DWORD PTR [rbp-12]
cdq
shr edx, 30
add eax, edx
and eax, 3
sub eax, edx
mov DWORD PTR [rbp-40], eax
mov eax, DWORD PTR [rbp-20]
lea edx, [rax+16]
mov eax, DWORD PTR [rbp-36]
add eax, edx
add eax, eax
sub eax, DWORD PTR [rbp-32]
sub eax, DWORD PTR [rbp-40]
mov ecx, eax
mov edx, -1840700269
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 2
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-44], eax
mov edx, DWORD PTR [rbp-44]
mov eax, edx
sal eax, 3
sub eax, edx
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-44], eax
mov edx, DWORD PTR [rbp-32]
mov eax, edx
sal eax, 2
add eax, edx
add eax, eax
add edx, eax
mov eax, DWORD PTR [rbp-4]
add edx, eax
mov eax, DWORD PTR [rbp-44]
imul eax, eax, 22
lea ecx, [rdx+rax]
mov edx, 1218970763
mov eax, ecx
imul edx
sar edx, 7
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-48], eax
mov edx, DWORD PTR [rbp-32]
mov eax, DWORD PTR [rbp-44]
add edx, eax
mov eax, DWORD PTR [rbp-48]
mov ecx, eax
sal eax, 3
sub ecx, eax
mov eax, ecx
add eax, edx
lea ecx, [rax+114]
mov edx, -2078209981
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 4
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-52], eax
mov edx, DWORD PTR [rbp-32]
mov eax, DWORD PTR [rbp-44]
add edx, eax
mov eax, DWORD PTR [rbp-48]
mov ecx, eax
sal eax, 3
sub ecx, eax
mov eax, ecx
add eax, edx
lea ecx, [rax+114]
mov edx, -2078209981
mov eax, ecx
imul edx
lea eax, [rdx+rcx]
sar eax, 4
mov edx, eax
mov eax, ecx
sar eax, 31
sub edx, eax
mov eax, edx
mov DWORD PTR [rbp-56], eax
mov edx, DWORD PTR [rbp-56]
mov eax, edx
sal eax, 5
sub eax, edx
sub ecx, eax
mov eax, ecx
mov DWORD PTR [rbp-56], eax
mov eax, DWORD PTR [rbp-56]
add eax, 1
mov DWORD PTR [rbp-60], eax
mov eax, 0
.L5:
leave
ret