欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【汇编程序】实现输出2012-2100年之间所有闰年

发布时间:2023/12/18 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【汇编程序】实现输出2012-2100年之间所有闰年 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

程序需求:能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,把它们存放在数组Lyear中并输出到屏幕上。
编程思路:汇编中ESI用来做年份计数器,ECX用来做闰年个数计数器,用DIV指令来求余数。

开发环境

Win10 + VS2017

C语言代码实现如下:

#include <stdio.h> int main() {printf("Leap year is follow:\n");for (int i = 2012; i < 2100; i++){if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0))printf("%d\t",i);}return 0; }

汇编语言代码实现如下:

INCLUDELIB kernel32.lib INCLUDELIB ucrt.lib INCLUDELIB legacy_stdio_definitions.lib.386 .model flat,stdcallExitProcess PROTO, dwExitCode:DWORDprintf PROTO C : dword,:vararg scanf PROTO C : dword,:vararg.data Lyear dword 25 dup(0) msg byte 'Leap year is follow:',10,0 format byte '%d',9,0.code main Procxor ecx,ecxmov esi,2012jmp testing body:mov eax,esimov ebx,4cdqdiv ebxcmp edx,0jne nextmov eax,esimov ebx,100cdqdiv ebxcmp edx,0je nextmov dword ptr Lyear[ecx*4],esiinc ecxjmp over next:mov eax,esimov ebx,400cdqdiv ebxcmp edx,0jne overmov dword ptr Lyear[ecx*4],esiinc ecx over:inc esi testing:cmp esi,2100jl bodypushadinvoke printf,offset msgpopadxor esi,esi again:pushadinvoke printf,offset format,dword ptr Lyear[esi*4]popadinc esiloop againpush 0hcall ExitProcess main endp end main

编译运行后结果如下:

总结

以上是生活随笔为你收集整理的【汇编程序】实现输出2012-2100年之间所有闰年的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。