1950773588 发表于 2021-7-4 16:18 是除法那部分,谢谢 |
zhxiufan 发表于 2020-12-17 09:40 你好,您分享的一种用汇编写的计算器,我花了两天时间把别的地方都看懂了,感觉您太厉害了,就是除法那部分没看懂您的思路,可以分享一下吗,或者标注一下除法那部分吗?我随时期待您的回复,不胜感激!! |
你好,您分享的一种用汇编写的计算器,我花了两天时间把别的地方都看懂了,感觉您太厉害了,就是除法那部分没看懂您的思路,可以分享一下吗,或者标注一下除法那部分吗?我随时期待您的解答,不胜感谢!!! |
你好,您分享的一种用汇编写的计算器,我花了两天时间把别的地方都看懂了,感觉您太厉害了,就是除法那部分没看懂您的思路,可以分享一下吗,或者标注一下乘法那部分吗? |
;加了一些注释,希望对大家有些帮助。 ORG 0000H LJMP START ORG 0030H START: MOV SP,#60H LCALL INT ;调用初始化子程序 START1: LCALL CLEAR ;调用清屏子程序 ;*********************************固定字符显示 mov column3,#0 mov pagef3,#0 mov codes,#0 ;'数' lcall writeleft2 mov column3,#0 mov pagef3,#4 mov codes,#2 ;'结' lcall writeleft2 mov column3,#16 mov pagef3,#4 mov codes,#3 ;'果' lcall writeleft2 mov column3,#16 mov pagef3,#0 mov codes,#1 ;'字' lcall writeleft2 mov column,#32 mov pagef,#0 mov codes,#1 ;'1' lcall writeleft mov column3,#0 mov pagef3,#2 mov codes,#0 ;‘数’ lcall writeleft2 mov column,#40 mov pagef,#2 mov codes,#15 ;':' lcall writeleft mov column,#40 mov pagef,#0 mov codes,#15 ;':' lcall writeleft mov column3,#16 mov pagef3,#2 mov codes,#1 ;‘字’ lcall writeleft2 mov column,#32 mov pagef,#2 mov codes,#2 ;'2' lcall writeleft MOV R0,#0 MOV R1,#255 QQQ: MOV @R0,#0 INC R0 DJNZ R1,QQQ ;************************************固定字符显示结束,键盘扫描开始 dd: mov r0,#0f7h ;扫描码送R0 mov r1,#0 ;键值初始为0 cc: mov a,r0 mov p1,a ;扫描码送P1 mov a,p1 ;读结果码 mov r2,a ;结果码送R2 setb c mov r3,#4 ;一次共4个扫描码 bb: rlc a ;带进位循环左移,最高位移入C jnc aa ;如果键位在此转aa ee: inc r1 ;键值加1 djnz r3,bb ;一行(列)有4个列(行) mov a,r0 setb c rrc a ;修改扫描码 mov r0,a jc cc ;如果未完成4行(列)扫描转cc ljmp dd ;否则转dd(无键按下) aa: lcall mm ;延时约4毫秒 mov a,p1 xrl a,r2 jnz ee ;如果是抖动造成转ee ff: mov a,p1 xrl a,r2 jz ff ;等待按键抬起 sjmp cal_start ;---------------------------------------- KAOO: LJMP KAO BBB2: LJMP BB2 ;接收数字2 ;---------------------------------------- cal_start: MOV A,51H ;51H:1=加,2=减,3=乘,4=除 CJNE A,#1,BBB2 ;加法 MOV A,R1 ;键值 CJNE A,#14,KAOO ;14为‘=’ ;加法运算开始,数字组成:49H48H46H45H44H42H41H40H,结果相同,最高位在CEH MOV 47H,R1 LCALL A31 ;显示运算符 MOV A,40H ADD A,60H MOV B,#10 DIV AB MOV 40H,B ADD A,41H ADD A,71H MOV B,#10 DIV AB MOV 41H,B ADD A,42H ADD A,72H MOV B,#10 DIV AB MOV 42H,B ADD A,44H ADD A,74H MOV B,#10 DIV AB MOV 44H,B ADD A,45H ADD A,75H MOV B,#10 DIV AB MOV 45H,B ADD A,46H ADD A,76H MOV B,#10 DIV AB MOV 46H,B ADD A,48H ADD A,78H MOV B,#10 DIV AB MOV 48H,B ADD A,49H ADD A,79H MOV B,#10 DIV AB MOV 49H,B MOV 0CEH,A ;最高位 CJNE A,#0,CC0 MOV A,49H CJNE A,#0,CC1 MOV A,48H CJNE A,#0,CC2 MOV A,46H CJNE A,#0,CC3 MOV A,45H CJNE A,#0,CC4 MOV A,44H CJNE A,#0,CC5 MOV A,42H CJNE A,#0,CC6 MOV A,41H CJNE A,#0,CC7 MOV A,40H CJNE A,#0,CC8 ;显示结果 CC0:LCALL A08 CC1:LCALL A07 CC2:LCALL A06 CC3:LCALL A05 CC4:LCALL A04 CC5:LCALL A03 CC6:LCALL A02 CC7:LCALL A01 CC8:LCALL A00 LJMP DD KAO: CJNE A,#15,KAO1 ;15为ESC键 LJMP START1 KAO1: MOV A,50H CJNE A,#0,A1A1 MOV 60H,R1 LCALL A8 INC 50H ljmp dd A1A1: CJNE A,#1,A1A2 MOV 71H,60H MOV 60H,R1 LCALL A8 LCALL A9 INC 50H LJMP DD A1A2: CJNE A,#2,A1A3 MOV 72H,71H MOV 71H,60H MOV 60H,R1 LCALL A8 LCALL A9 LCALL A10 INC 50H LJMP DD A1A3: CJNE A,#3,A1A5 MOV 74H,72H MOV 72H,71H MOV 71H,60H MOV 60H,R1 LCALL A8 LCALL A9 LCALL A10 LCALL A11 INC 50H LJMP DD A1A5: CJNE A,#4,A1A6 MOV 75H,74H MOV 74H,72H MOV 72H,71H MOV 71H,60H MOV 60H,R1 LCALL A8 LCALL A9 LCALL A10 LCALL A11 LCALL A12 INC 50H LJMP DD A1A6: CJNE A,#5,A1A7 MOV 76H,75H MOV 75H,74H MOV 74H,72H MOV 72H,71H MOV 71H,60H MOV 60H,R1 LCALL A8 LCALL A9 LCALL A10 LCALL A11 LCALL A12 LCALL A13 INC 50H LJMP DD A1A7: CJNE A,#6,A1A9 MOV 78H,76H MOV 76H,75H MOV 75H,74H MOV 74H,72H MOV 72H,71H MOV 71H,60H MOV 60H,R1 LCALL A8 LCALL A9 LCALL A10 LCALL A11 LCALL A12 LCALL A13 LCALL A14 INC 50H LJMP DD A1A9: CJNE A,#7,A1A10 MOV 79H,78H MOV 78H,76H MOV 76H,75H MOV 75H,74H MOV 74H,72H MOV 72H,71H MOV 71H,60H MOV 60H,R1 LCALL A8 LCALL A9 LCALL A10 LCALL A11 LCALL A12 LCALL A13 LCALL A14 LCALL A15 INC 50H A1A10: LJMP DD BBB3: LJMP BB33 KAOO2: LJMP KAO2 BB2: CJNE A,#2,BBB3 ;减法运算 .......... |
代码可用,但注释太少,函数名称也没有相应的含义,无法弄懂呀。 |