📄 hzmmi.lst
字号:
02E7 E083 LDI R24,3
02E8 840A LDD R0,10+Y
02E9 1580 CP R24,R0
02EA F018 BCS 0x02EE
02EB 940A DEC R0
02EC 860A STD R0,10+Y
02ED C009 RJMP 0x02F7
(0344) else if(q==6) q-=3;
02EE 858A LDD R24,10+Y
02EF 3086 CPI R24,6
02F0 F419 BNE 0x02F4
02F1 5083 SUBI R24,3
02F2 878A STD R24,10+Y
02F3 C003 RJMP 0x02F7
(0345) else q-=12;
02F4 858A LDD R24,10+Y
02F5 508C SUBI R24,0xC
02F6 878A STD R24,10+Y
(0346) // zk=q;
(0347) zk=(q*94l+w)*32l+0x100l+0x800l+0x1000l;
02F7 842A LDD R2,10+Y
02F8 2433 CLR R3
02F9 2444 CLR R4
02FA 2455 CLR R5
02FB E908 LDI R16,0x98
02FC E010 LDI R17,0
02FD 940E0594 CALL lpm32
02FF 925A ST R5,-Y
0300 924A ST R4,-Y
0301 923A ST R3,-Y
0302 922A ST R2,-Y
0303 940E05EE CALL mpy32u
0305 0118 MOVW R2,R16
0306 0129 MOVW R4,R18
0307 2C6A MOV R6,R10
0308 2477 CLR R7
0309 2488 CLR R8
030A 2499 CLR R9
030B 0C26 ADD R2,R6
030C 1C37 ADC R3,R7
030D 1C48 ADC R4,R8
030E 1C59 ADC R5,R9
030F E085 LDI R24,5
0310 E090 LDI R25,0
0311 938A ST R24,-Y
0312 0181 MOVW R16,R2
0313 0192 MOVW R18,R4
0314 940E05A8 CALL lsl32
0316 0118 MOVW R2,R16
0317 0129 MOVW R4,R18
0318 EA00 LDI R16,0xA0
0319 E010 LDI R17,0
031A 940E0594 CALL lpm32
031C 0E20 ADD R2,R16
031D 1E31 ADC R3,R17
031E 1E42 ADC R4,R18
031F 1E53 ADC R5,R19
0320 E90C LDI R16,0x9C
0321 E010 LDI R17,0
0322 940E0594 CALL lpm32
0324 0E20 ADD R2,R16
0325 1E31 ADC R3,R17
0326 1E42 ADC R4,R18
0327 1E53 ADC R5,R19
0328 E904 LDI R16,0x94
0329 E010 LDI R17,0
032A 940E0594 CALL lpm32
032C 0E20 ADD R2,R16
032D 1E31 ADC R3,R17
032E 1E42 ADC R4,R18
032F 1E53 ADC R5,R19
0330 01FE MOVW R30,R28
0331 8220 STD R2,0+Z
0332 8231 STD R3,1+Z
0333 8242 STD R4,2+Z
0334 8253 STD R5,3+Z
(0348) lib_addr.l=zk<<2;
0335 E082 LDI R24,2
0336 E090 LDI R25,0
0337 938A ST R24,-Y
0338 0181 MOVW R16,R2
0339 0192 MOVW R18,R4
033A 940E05A8 CALL lsl32
033C 931001DC STS R17,_lib_addr+1
033E 930001DB STS R16,_lib_addr
0340 933001DE STS R19,_lib_addr+3
0342 932001DD STS R18,_lib_addr+2
(0349) PORTF=lib_addr.bytes.a2 & 0x0f;
0344 918001DD LDS R24,_lib_addr+2
0346 708F ANDI R24,0xF
0347 93800062 STS R24,0x62
(0350) aa=(zk & 0x3fff) | 0xc000;
0349 E900 LDI R16,0x90
034A E010 LDI R17,0
034B 940E05B4 CALL lpm16
034D 01FE MOVW R30,R28
034E 8020 LDD R2,0+Z
034F 8031 LDD R3,1+Z
0350 2220 AND R2,R16
0351 2231 AND R3,R17
0352 E80C LDI R16,0x8C
0353 E010 LDI R17,0
0354 940E05B4 CALL lpm16
0356 2A20 OR R2,R16
0357 2A31 OR R3,R17
0358 822C STD R2,4+Y
0359 823D STD R3,5+Y
(0351) pt=(byte *)aa;
035A 862B STD R2,11+Y
035B 863C STD R3,12+Y
(0352)
(0353) //汉字定位,行
(0354) address1=lrow;
035C 802E LDD R2,6+Y
035D 803F LDD R3,7+Y
035E 8628 STD R2,8+Y
035F 8639 STD R3,9+Y
(0355) address1=DIS_LEN*address1+lcol/8;
0360 E028 LDI R18,0x8
0361 E030 LDI R19,0
0362 018B MOVW R16,R22
0363 940E0537 CALL div16s
0365 0118 MOVW R2,R16
0366 E025 LDI R18,5
0367 E030 LDI R19,0
0368 8508 LDD R16,8+Y
0369 8519 LDD R17,9+Y
036A 940E05C2 CALL lsl16
036C 0128 MOVW R4,R16
036D 0C42 ADD R4,R2
036E 1C53 ADC R5,R3
036F 8648 STD R4,8+Y
0370 8659 STD R5,9+Y
(0356)
(0357) if(lcol<145)
0371 3961 CPI R22,0x91
0372 E0E0 LDI R30,0
0373 077E CPC R23,R30
0374 F00C BLT 0x0376
0375 C038 RJMP 0x03AE
(0358) {
(0359) for(i=0;i<16;i++)
0376 24EE CLR R14
0377 C031 RJMP 0x03A9
(0360) {
(0361) q=address1/0x100; //地址高位
0378 E020 LDI R18,0
0379 E031 LDI R19,1
037A 8508 LDD R16,8+Y
037B 8519 LDD R17,9+Y
037C 940E0537 CALL div16s
037E 870A STD R16,10+Y
(0362) w=address1%0x100; //地址低位
037F E020 LDI R18,0
0380 E031 LDI R19,1
0381 8508 LDD R16,8+Y
0382 8519 LDD R17,9+Y
0383 940E0535 CALL mod16s
0385 0158 MOVW R10,R16
(0363) write_data(w); //送低地址
0386 2D0A MOV R16,R10
0387 DE13 RCALL _write_data
(0364) write_data(q); //送高地址
0388 850A LDD R16,10+Y
0389 DE11 RCALL _write_data
(0365) write_order(0x24); //设置显示RAM地址
038A E204 LDI R16,0x24
038B DDFA RCALL _write_order
(0366) dis_code=*pt;
038C 85EB LDD R30,11+Y
038D 85FC LDD R31,12+Y
038E 80C0 LDD R12,0+Z
(0367) write_data(dis_code);
038F 2D0C MOV R16,R12
0390 DE0A RCALL _write_data
(0368) pt++;
0391 858B LDD R24,11+Y
0392 859C LDD R25,12+Y
0393 9601 ADIW R24,1
0394 878B STD R24,11+Y
0395 879C STD R25,12+Y
(0369) write_order(0x0c0); //设置一次写数据指令代码
0396 EC00 LDI R16,0xC0
0397 DDEE RCALL _write_order
(0370) write_data(*pt);
0398 85EB LDD R30,11+Y
0399 85FC LDD R31,12+Y
039A 8100 LDD R16,0+Z
039B DDFF RCALL _write_data
(0371) pt++;
039C 858B LDD R24,11+Y
039D 859C LDD R25,12+Y
039E 9601 ADIW R24,1
039F 878B STD R24,11+Y
03A0 879C STD R25,12+Y
(0372) write_order(0x0c4); //设置一次写数据指令代码
03A1 EC04 LDI R16,0xC4
03A2 DDE3 RCALL _write_order
(0373) address1=address1+DIS_LEN; //地址调整到下一行
03A3 8588 LDD R24,8+Y
03A4 8599 LDD R25,9+Y
03A5 9680 ADIW R24,0x20
03A6 8788 STD R24,8+Y
03A7 8799 STD R25,9+Y
(0374) }
03A8 94E3 INC R14
03A9 2D8E MOV R24,R14
03AA 3180 CPI R24,0x10
03AB F408 BCC 0x03AD
03AC CFCB RJMP 0x0378
(0375) }
03AD C02B RJMP 0x03D9
(0376) else
(0377) { //如果本行只剩下半个字的位置,则将这个位置填空格
(0378) for(i=0;i<16;i++)
03AE 24EE CLR R14
03AF C022 RJMP 0x03D2
(0379) {
(0380) q=address1/0x100; //地址高位
03B0 E020 LDI R18,0
03B1 E031 LDI R19,1
03B2 8508 LDD R16,8+Y
03B3 8519 LDD R17,9+Y
03B4 940E0537 CALL div16s
03B6 870A STD R16,10+Y
(0381) w=address1%0x100; //地址低位
03B7 E020 LDI R18,0
03B8 E031 LDI R19,1
03B9 8508 LDD R16,8+Y
03BA 8519 LDD R17,9+Y
03BB 940E0535 CALL mod16s
03BD 0158 MOVW R10,R16
(0382)
(0383) write_data(w); //送低地址
03BE 2D0A MOV R16,R10
03BF DDDB RCALL _write_data
(0384) write_data(q); //送高地址
03C0 850A LDD R16,10+Y
03C1 DDD9 RCALL _write_data
(0385) write_order(0x24); //设置显示RAM地址
03C2 E204 LDI R16,0x24
03C3 DDC2 RCALL _write_order
(0386)
(0387) write_data(00); //填空格
03C4 2700 CLR R16
03C5 DDD5 RCALL _write_data
(0388) write_order(0xc0); //设置一次写数据指令代码
03C6 EC00 LDI R16,0xC0
03C7 DDBE RCALL _write_order
(0389) write_data(00); //填空格
03C8 2700 CLR R16
03C9 DDD1 RCALL _write_data
(0390) write_order(0xc0); //设置一次写数据指令代码
03CA EC00 LDI R16,0xC0
03CB DDBA RCALL _write_order
(0391) address1=address1+DIS_LEN; //地址调整到下一行
03CC 8588 LDD R24,8+Y
03CD 8599 LDD R25,9+Y
03CE 9680 ADIW R24,0x20
03CF 8788 STD R24,8+Y
03D0 8799 STD R25,9+Y
(0392) }
03D1 94E3 INC R14
03D2 2D8E MOV R24,R14
03D3 3180 CPI R24,0x10
03D4 F2D8 BCS 0x03B0
(0393) *str--;
03D5 5041 SUBI R20,1
03D6 4050 SBCI R21,0
(0394) *str--;
03D7 5041 SUBI R20,1
03D8 4050 SBCI R21,0
(0395) }
(0396) lcol=lcol+16; //列数+8
03D9 5F60 SUBI R22,0xF0
03DA 4F7F SBCI R23,0xFF
(0397) if(lcol>=160)
03DB 3A60 CPI R22,0xA0
03DC E0E0 LDI R30,0
03DD 077E CPC R23,R30
03DE F03C BLT 0x03E6
(0398) {
(0399) lrow+=16;
03DF 818E LDD R24,6+Y
03E0 819F LDD R25,7+Y
03E1 9640 ADIW R24,0x10
03E2 838E STD R24,6+Y
03E3 839F STD R25,7+Y
(0400) lcol=0;
03E4 2766 CLR R22
03E5 2777 CLR R23
(0401) }
(0402) }
03E6 01FA MOVW R30,R20
03E7 8020 LDD R2,0+Z
03E8 2022 TST R2
03E9 F009 BEQ 0x03EB
03EA CE39 RJMP 0x0224
(0403)
(0404) }
03EB 962D ADIW R28,0xD
03EC 940E057C CALL pop_gset5
03EE 9508 RET
_str_sasc:
dis_code --> Y+1
lrow --> Y+4
zk --> Y+0
aa --> R12
lcol --> R22
w --> R10
pt --> R14
i --> Y+9
q --> Y+8
address1 --> Y+6
str --> R20
col --> R10
row --> R12
03EF 940E0575 CALL push_gset5
03F1 2EA2 MOV R10,R18
03F2 2EC0 MOV R12,R16
03F3 972A SBIW R28,0xA
03F4 894C LDD R20,20+Y
03F5 895D LDD R21,21+Y
(0405)
(0406) //显示小ASCII串
(0407) //row--行
(0408) //col--列
(0409) //str--字符串指针
(0410) void str_sasc(byte row,byte col,byte *str)
(0411) {
(0412) byte q,w,dis_code,i;
(0413) int address1,lrow,lcol;
(0414) byte *pt;
(0415) unsigned int aa;
(0416) long zk;
(0417)
(0418) lrow=row%80; //设置行
03F6 E520 LDI R18,0x50
03F7 E030 LDI R19,0
03F8 2D0C MOV R16,R12
03F9 2711 CLR R17
03FA 940E0535 CALL mod16s
03FC 830C STD R16,4+Y
03FD 831D STD R17,5+Y
(0419) lcol=(col*8)%160; //列
03FE EA20 LDI R18,0xA0
03FF E030 LDI R19,0
0400 2D0A MOV R16,R10
0401 2711 CLR R17
0402 0F00 LSL R16
0403 1F11 ROL R17
0404 0F00 LSL R16
0405 1F11 ROL R17
0406 0F00 LSL R16
0407 1F11 ROL R17
0408 940E0535 CALL mod16s
040A 01B8 MOVW R22,R16
(0420)
(0421) for(;*str;)
040B C0A3 RJMP 0x04AF
(0422) {
(0423) q=(*str++);
040C 011A MOVW R2,R20
040D 01C1 MOVW R24,R2
040E 9601 ADIW R24,1
040F 01AC MOVW R20,R24
0410 01F1 MOVW R30,R2
0411 8020 LDD R2,0+Z
0412 8628 STD R2,8+Y
(0424)
(0425) if(q==13) //处理回车符
0413 8588 LDD R24,8+Y
0414 308D CPI R24,0xD
0415 F441 BNE 0x041E
(0426) {
(0427) lrow+=2; //换两行
0416 818C LDD R24,4+Y
0417 819D LDD R25,5+Y
0418 9602 ADIW R24,2
0419 838C STD R24,4+Y
041A 839D STD R25,5+Y
(0428) lcol=0; //列的开始
041B 2766 CLR R22
041C 2777 CLR R23
(0429) continue;
041D C091 RJMP 0x04AF
(0430) }
(0431) if(q<0x20) continue; //为不可见字符,继续循环
041E 8588 LDD R24,8+Y
041F 3280 CPI R24,0x20
0420 F408 BCC 0x0422
0421 C08D RJMP 0x04AF
(0432) zk=q*8l+0x100l;
0422 E083 LDI R24,3
0423 E090 LDI R25,0
0424 8428 LDD R2,8+Y
0425 2433 CLR R3
0426 2444 CLR R4
0427 2455 CLR R5
0428 938A ST R24,-Y
0429 0181 MOVW R16,R2
042A 0192 MOVW R18,R4
042B 940E05A8 CALL lsl32
042D 0118 MOVW R2,R16
042E 0129 MOVW R4,R18
042F EA00 LDI R16,0xA0
0430 E010 LDI R17,0
0431 940E0594 CALL lpm32
0433 0E20 ADD R2,R16
0434 1E31 ADC R3,R17
0435 1E42 ADC R4,R18
0436 1E53 ADC R5,R19
0437 01FE MOVW R30,R28
0438 8220 STD R2,0+Z
0439 8231 STD R3,1+Z
043A 8242 STD R4,2+Z
043B 8253 STD R5,3+Z
(0433) lib_addr.l=zk<<2;
043C E082 LDI R24,2
043D E090 LDI R25,0
043E 938A ST R24,-Y
043F 0181 MOVW R16,R2
0440 0192 MOVW R18,R4
0441 940E05A8 CALL lsl32
0443 931001DC STS R17,_lib_addr+1
0445 930001DB STS R16,_lib_addr
0447 933001DE STS R19,_lib_addr+3
0449 932001DD STS R18,_lib_addr+2
(0434) aa=lib_addr.bytes.a2 & 0x0f;
044B 918001DD LDS R24,_lib_addr+2
044D 2799 CLR R25
044E 708F ANDI R24,0xF
044F 7090 ANDI R25,0
0450 016C MOVW R12,R24
(0435) PORTF=aa;
0451 92C00062 STS R12,0x62
(0436) aa=(zk & 0x3fff) | 0xc000;
0453 E900 LDI R16,0x90
0454 E010 LDI R17,0
0455 940E05B4 CALL lpm16
0457 01FE MOVW R30,R28
0458 80C0 LDD R12,0+Z
0459 80D1 LDD R13,1+Z
045A 22C0 AND R12,R16
045B 22D1 AND R13,R17
045C E80C LDI R16,0x8C
045D E010 LDI R17,0
045E 940E05B4 CALL lpm16
0460 2AC0 OR R12,R16
0461 2AD1 OR R13,R17
(0437) pt=(byte *)aa;
0462 0176 MOVW R14,R12
(0438) address1=lrow;
0463 802C LDD R2,4+Y
0464 803D LDD R3,5+Y
0465 822E STD R2,6+Y
0466 823F STD R3,7+Y
(0439) address1=DIS_LEN*address1+lcol/8;
0467 E028 LDI R18,0x8
0468 E030 LDI R19,0
0469 018B MOVW R16,R22
046A 940E0537 CALL div16s
046C 0118 MOVW R2,R16
046D E025 LDI R18,5
046E E030 LDI R19,0
046F 810E LDD R16,6+Y
0470 811F LDD R17,7+Y
0471 940E05C2 CALL lsl16
0473 0128 MOVW R4,R16
0474 0C42 ADD R4,R2
0475 1C53 ADC R5,R3
0476 824E STD R4,6+Y
0477 825F STD R5,7+Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -