[汇编] 闰年计算
1 data segment ;定义数据段 2 infon db 0dh,0ah,'Please input a year: $' 3 Y db 0dh,0ah,'This is a leap year! $' 4 N db 0dh,0ah,'This is not a leap year! $' 5 w dw 0 6 buf db 8 7 db ' ' 8 db 8 dup(' ') 9 data ends 10 11 stack segment stack 12 db 200 dup(0) 13 stack ends 14 15 code segment 16 assume ds:data,ss:stack,cs:code 17 start:mov ax,data 18 mov ds,ax 19 mov w,0h 20 21 lea dx,infon ;在屏幕上显示提示信息 22 mov ah,9 ;21号ah放09H,dx为串地址,字符串以'$'结束 23 int 21h 24 25 lea dx,buf ;从键盘输入年份字符串 26 mov ah,0AH ;从键盘存在缓冲区,DX=缓冲区首址,DX为缓冲区最大大小,DX+1实际输入字符串数 27 int 21h 28 29 mov ch, 0h ;将实际输入长度放进cl中 30 mov cl, [buf+1] 31 lea di,buf+2 ;将字符串首址放在di中 32 call datacate 33 call ifyears 34 jc a1 ;进位为1则转移=jb,即闰年转移 35 36 lea dx,n ;显示不是闰年 37 mov ah,9 38 int 21h 39 jmp start 40 a1: lea dx,y ;显示是闰年 41 mov ah,9 42 int 21h 43 jmp start 44 45 exit: mov ah,4ch 46 int 21h 47 48 49 50 ;之前要准备好:将输入结果放进w中 51 datacate proc near; 52 push cx; 53 dec cx 54 lea si,buf+2 55 tt1: inc si ;loop的停止条件cx=0,cx自减 56 loop tt1 ;把字符串指针移到字符串最后 57 pop cx 58 59 60 mov dh,30h 61 mov bl,0Ah 62 mov ax,1 ;乘的时候要用 63 l1: push ax 64 sub byte ptr [si],dh ;sub dst,src减去'0',强制类型转换 65 mul byte ptr [si] ;mul src:字节操作:(AX)<-(AL)*(SRC) 字操作:(DX,AX)<-(AX)*(SRC) ;这里al做乘,当年份为较大时就会出错 66 add w,ax ;将这一位取出的数字所对应的整数加到w中 67 pop ax 68 mul bl ;ax原来为1以后每次乘10 69 dec si 70 loop l1 71 ret 72 datacate endp 73 74 ;计算是否为闰年,w存储年的数值,结果通过改变进位标志位来返回CF 75 ifyears proc near 76 push bx ;保护 77 push cx 78 push dx 79 mov ax,w ;将上面转换的整数值给ax 80 mov cx,ax ;让cx=ax=w,cx保存数据 81 mov dx,0 ;dx清0 82 mov bx,4 ;bx=4 83 div bx ;div SRC 字:(AL)=(AX)/(SRC)商 字节(AX)=(DX,AX)/(SRC) 84 cmp dx,0 ;是否可以整出4 85 jnz lab1 86 mov ax,cx ;是否可以整除100 87 mov bx,100 88 div bx 89 cmp dx,0 90 jnz lab2 91 mov ax,cx ;可以整除400 92 mov bx,400 93 div bx 94 cmp dx,0 95 jz lab2 96 lab1: clc ;不是闰年[clc 将进位位CF清零,即CF=0.] 97 jmp lab3 ; [STC(进位位置为1指令)] 98 lab2: stc ;不能整除100,但能整除4 + 可以整除400 99 lab3: pop dx 100 pop cx 101 pop bx 102 ret 103 ifyears endp 104 code ends 105 end start
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?