(4)定义字节指令DB 格式:[标号:]DB8位二进制数表 DB命令是从指定的地址单元开始,定义若干个8 位内存单元的内容。例如 ORG 1000H TAB;DB23H,73,“6 B TABI: DB 110B 以上伪指令经汇编以后,将对从1000H开始的若干 内存单元赋值: (1000H)=23H(1001H)49H (1002H)=36H(1003H)=42H 1004H=06H 其中36H和42H分别是字符6和B的ASC码,其余 的十进制数(73)和二进制数(110B)也都换算为十 六进制数了
(4)定义字节指令DB 格式:[标号:] DB 8位二进制数表 DB命令是从指定的地址单元开始,定义若干个8 位内存单元的内容。例如, ORG 1000H TAB; DB 23H,73, “6” , “B” TABl: DB 110B 以上伪指令经汇编以后,将对从1000H开始的若干 内存单元赋值: (1000H)=23H (1001H)=49H (1002H)=36H (1003H)=42H (1004H)=06H 其中36H和42H分别是字符6和B的ASCII码,其余 的十进制数(73)和二进制数(110B)也都换算为十 六进制数了
(5)定义字命令DW 格式:[标号:]DW16位二进制数表 例如, ORG 1000H TAB: DW 1234H, 0ABH, 10 汇编后: (1000H)=12H(1001H)=34H (1002H)=00H(1003H)=ABH 1004H)=00H(1005H=0AH DB、DW伪指令都只对程序存储器起作用,不能 用来对数据存储器的内容进行赋值或进行其它初始化 的工作
(5)定义字命令 DW 格式:[标号:] DW 16位二进制数表 例如, ORG 1000H TAB: DW 1234H , 0ABH , 10 汇编后: (1000H)=12H (1001H ) = 34H (1002H ) = 00H ( 1003H ) = ABH (1004H ) =00H (1005H) =0AH DB、DW伪指令都只对程序存储器起作用,不能 用来对数据存储器的内容进行赋值或进行其它初始化 的工作
4.2顺序程序设计 顺序结构程序是一种最简单、最基本的程序(也称为简单 程序),它是一种无分支的直线形程序,按照程序编写的顺序 依次执行 【例4-1】两个8位无符号数相加,和仍为8位。 假设两个无符号数X1,X2分别存放于内部RAM6OH 61H单元中,求其和并将和送入62H单元。 程序如下: ORG 0000H CLR MOV R0,#60H :设R0为数据指针 MOV a, ORO :取Ⅹ INC RO ADDC A, aRO :X,+Ⅹ INC RO MOV aRO, A 保存结果 END
4.2 顺序程序设计 顺序结构程序是一种最简单、最基本的程序(也称为简单 程序),它是一种无分支的直线形程序,按照程序编写的顺序 依次执行。 【例4-1】 两个8位无符号数相加,和仍为8位。 假设两个无符号数X1, X2分别存放于内部RAM60H、 61H单元中,求其和并将和送入62H单元。 程序如下: ORG 0000H CLR C MOV R0 ,# 60H ;设R0为数据指针 MOV A ,@R0 ;取X1 1NC R0 ADDC A ,@R0 ;X1+X2 1NC R0 MOV @R0,A ;保存结果 END
【例4-2】两个无符号双字节数相加。设被加数存放在内部存 储器30H(高位字节)、31H(低位字节)单元,加数存放在内 部存储器40H(高位字节)、41H(低位字节)单元,和存入30H (高位字节)、31H(低位字节)单元 程序如下: ORG 0000H CLR :将C清零 MOV R0,#31H :送被加数首址 MOV R1,#41H 送加数首址 MOV A,⑦aRQ 取被加数低宰节 ADD A ORI 两个低宰节相加 MOV ORO. A 低宰节和荐人被加数低宰节 DEC RO 修改指针,指向被加数高宰节 DEC RI 修改指针,指向加数高宰节 MOV A. ORO 取被加数高字节 ADDC A. ORI 高宰节相加 MOV ORO. A 存结果 已ND
【例4-2】两个无符号双字节数相加。设被加数存放在内部存 储器30H(高位字节)、31H(低位字节)单元,加数存放在内 部存储器40H(高位字节)、41H(低位字节)单元,和存入30H (高位字节)、31H(低位字节)单元。 程序如下: ORG 0000H CLR C ;将C清零 MOV R0 ,#31H ;送被加数首址 MOV R1 ,#41H ;送加数首址 MOV A ,@R0 ;取被加数低字节 ADD A ,@R1 ;两个低字节相加 MOV @R0 ,A ;低字节和存人被加数低字节 DEC R0 ;修改指针,指向被加数高字节 DEC R1 ;修改指针,指向加数高字节 MOV A,@R0 ;取被加数高字节 ADDC A,@R1 ;高字节相加 MOV @R0 , A ;存结果 END
【例4-3】编写16位二进制数求补程序 进制数的求补可归结为“求反加1”的过程,求反可用 CPL指令实现;加1时应注意,加1只能加在低8位的最低位上 因为现在是16位数,有两个字节,因此要考虑进位问题,即低8 位取反加1,高8位取反后应加上低8位加1时可能产生的进位, 还要注意这里的加1不能用ⅠNC指令,因为NC指令不影响CY标 ORG 0200H MOV A, RO ;低8位送A CPL A ;取反 ADD A, #OlH ;加1 MOV R2,A ;存结果 MOV A, RI ;高8位送A CPL A ;取反 ADDC A, #OOH ;加进位 MOV R3, A ;存结果 END
【例4-3】编写16位二进制数求补程序 二进制数的求补可归结为“求反加1”的过程,求反可用 CPL指令实现;加1时应注意,加1只能加在低8位的最低位上。 因为现在是16位数,有两个字节,因此要考虑进位问题,即低8 位取反加1,高8位取反后应加上低8位加1时可能产生的进位, 还要注意这里的加1不能用INC指令,因为INC指令不影响CY标 志。 ORG程序如下: 0200H MOV A ,R0 ;低8位送A CPL A ;取反 ADD A ,#01H ;加l MOV R2 ,A ;存结果 MOV A ,R1 ;高8位送A CPL A ;取反 ADDC A ,#00H ;加进位 MOV R3 ,A ;存结果 END