lab2000p程序s3.asm

 

; 软件实验三 二进制到ASCII码转换 S3.ASM

; 将 A 拆为二个 ASCII 码, 并存入 Result 开始的二个单元

Result equ 20h

org 0

 ljmp Start

ASCIITab:

db '0123456789ABCDEF' ; 定义数字对应的ASCII表

BinToHex:

  mov dptr, #ASCIITab

  mov b, a ; 暂存 A

  swap a

  anl a, #0fh ; 取高四位

  movc a, @a+dptr ; 查ASCII表

  mov Result, a

  mov a, b ; 恢复 A

  anl a, #0fh ; 取低四位

  movc a, @a+dptr ; 查ASCII表

  mov Result+1, a

  ret

Start:

  mov sp, #40h

  mov a, #1ah

  call BinToHex

  ljmp $

end

 

 

程序解释:

1,ASCIITab:

db '0123456789ABCDEF' ; 定义数字对应的ASCII表

2,mov dptr,#ASCIITab

把#ASCIITab的地址赋给dptr

3,swap a

SWAP:累加器ACC半字节交换指令

SWAP A ; 11000100(指令编码) 

指令功能是将累加器ACC的高半字节(ACC.7~ACC.4)和低半字节(ACC.3~ACC.0)互换。

4,anl a, #0fh ; 取高四位(右高?)

anl按位与

 

ANL 位与运算

ORL 位或运算

 

0FH = 0000 1111 h

80H = 0100 0000 h

或后= 0100 1111 h = 8FH

 

所以A=0FH,执行ORL后是8FH

 

0FH = 0000 1111 h

88H = 0100 0100 h

与后= 0000 0100 h = 08H

 

所以A=0FH,执行ANL A,#88H后是08H

 

口诀:

与 有0则0

或 有1则1

 

 

知识点:

1,db(define byte)

 

DB 指令以表达式的值的字节形式初始化代码空间。

格式: [标号:]    DB   表达式表

表达式中可包含符号、字符串、或表达式等项,

各个项之间用逗号隔开,字符串应用引号括起来。

括号内的标号是可选项,如果使用了标号,

则标号的值将是表达式表中第一字节的地址。

DB 指令必须位于 CODE 段之内,否则将会发生错误。

TABLE:

DB  0C0H, 0F9H, 0A4H

TABLE1:

DB  " WEINA "

还有:

 

db = define byte(定义一个字节)  

dw = define word (定义一个字)

dd = define dword(定义两个字)

 

 

2,dptr

 通常写作:DPTR(Data Pointer)

  数据指针DPTR是80C51中一个功能比较特殊的寄存器。从结构DPTR是一个16位的特殊功能寄存器, 其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示,DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。主要功能是存放16位地址,作为片外RAM寻址用的地址寄存器(间接寻址),故称数据指针。

  访问片外数据存储器的指令为:

  MOVX A,@DPTR 读

  MOVX @DPTR,A 写

  DPTR的另一个作用是变址寻址,访问程序存储器,做查表指令:如:

  以dptr为基址寄存器,将dptr的内容与累加器a的内容相加得到变址地址

  movc a, @a+dptr ; (a)<-----((a)+(dptr))

<!--EndFragment-->

 

 

你可能感兴趣的:(ASM)