四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A 四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A. 查表找到第一条字节数与机器码 B.由第一条指令可得第二条指令的首址接着向下找 C.求LOOP值 2.例:试将下述程序汇编为目标程序 ORG 2000H START: MOV DPTR,#3000H CLR A MOV R7,#80H LOOP: MOVX @DPTR,A INC DPTR DJNZ R7,LOOP RET
注:LOOP为:(2006H)转移地址 = 200AH + LOOP LOOP = 2006H - 200AH = FCH 指令地址 目标程序 源程序 2000H: 90,30,00 START:MOV DPTR,#3000H 2003H: E4 CLR A 2004H: 7F,80 MOV R7,#80H 2006H: F0 LOOP:MOVX @DPTR,A 2007H: A3 INC DPTR 2008H: DF,FC DJNZ R7,LOOP 200AH: 22 RET 注:LOOP为:(2006H)转移地址 = 200AH + LOOP LOOP = 2006H - 200AH = FCH
五、程序设计举例 1.试编一延时100mS 延时程序(设晶振频率为6MHZ, 五、程序设计举例 1.试编一延时100mS 延时程序(设晶振频率为6MHZ, 一个机器周期为2US) 2.双字节数取补 把R4、R5中的内容取补后回送到R4、R5中 3.试将30H至32H 单元内容左移4位,其移出部分送 至R2中 4.对一批数的处理 A.设有100个字节带符号数存于2000H为首址的外存 中,试计算负数个数,并存于30H单元中。 B.设有20个字节二进制数存于以40H为首址的RAM中, 试计算它们“1”的个数,并存于A中。 C.设有100个字节ASCII码存于以2800H为首址的外存 中,试加上奇校验位,并存回原单元中
5.查表程序 A.设有一项值为2字节的数据表存于以2000H为首址的 单元中,已知项号存于R2中,试将该项号所对应的 项值存于R3、R4中 B.试按输入的ASCII字符命令(A-F),转向相应的处理 程序。命令字符的处理程序入口地址顺序存放于表 TAB中。设查表之前输入的命令字符在A中。 6.加减程序 A.求以50H为首址的20个单元内容之和(无符号数) B.求以50H为首址的20个单元内容之和(带符号数) C.4字节加,加数存于R0/R1为首址的单元中,和存 于R0为首址的单元中(低位在前) D.4字节减,被减数、减数存于R0/R1为首址的单元中, 差存于R0为首址的单元中(二进制数、低位在前)
E.4字节减,被减数、减数存于R0/R1为首址的单元中, 差存于R0为首址的单元中(BCD码) 公式:A-B=A+99…9+1-B, CY=1:结果为正(50-40为50+100-40=110) CY=0:结果为负(40-50为40+100-50=90)