
;汇编程序,以BUF为首地址的内容存单元中有1~15的平方表。
;查表求X单元中数(1~15之间)的平方值并送回X单元
;
code segment
assume cs:code,ds:code
org 100h
start:
push cs
pop ds
lea bx,BUF ;BX指向表首
mov al,X
dec al ;偏移送AL
xlat ;查表
mov X,al ;平方值并送回X单元
mov ah,4ch
int 21h
BUF db 1,4,9,16,25,36,49,64,81,100,121,144,169,196,225
X db 8
code ends
end start
16和7是查表指令时的PC与数据表格之间的字节数
MOV A ,@R0 ;取R0指向的地址中的数据到A
ANL A,#0FH ;高四位清零
ADD A,#16 ;加16
MOVC A, @A+PC ;查表,表的首地址为绝对地址PC+A
MOVC A,@A+PC就需要1个字节啊
查表指令距离表首地址的长度是字节数
用DPTR的汇编程序:
ORG 0100H
MOV 30H,#12H
MOV 31H,#34H
MOV 32H,#56H
MOV 33H,#78H
LCALL SUBRTE
ORG 1000H
SUBRTE: MOV R0,#30H ; ;置地址指针R0初值
MOV R1,#40H ; ;置地址指针R1初值
MOV R2,#4 ; ;置字节数
LOOP: MOV A,@R0 ; ;取16进制数
ANL A,#0FH ; ;屏蔽高4位
MOV DPTR,#TABLE ; ;
MOVC A,@A+DPTR ; ;查表低4位转换为ASCⅡ码
MOV @R1,A ; ;送结果
INC R1 ; ;修改指针
MOV A,@R0 ; ;从新取16进制数
SWAP A ; ;高4位与低4位互换
ANL A,#0FH ; ;取高4位
ADD A,#7
MOVC A,@A+PC ; ;查表高4位转换为ASCⅡ码
MOV @R1,A
INC R0
INC R1
DJNZ R2,LOOP
DEC R1
RET
TABLE: DB '012345678'
DB '9ABCDEF'
END
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV 30H,#3
MOV DPTR,#TAB
MOV A,30H
MOVC A,@A+DPTR
MOV 31H,A
SJMP $
TAB:
DB 0,1,4,9,16,25,36,49,64,81
END
这个是我写的,求的是平方的,楼主改一下数据段就好了
DATAS SEGMENT
TABLE DB 00H,01H,04H,09H,16H,25H,36H,49H,64H,81H
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
MOV AH,07H
INT 21H
AND AL,0FH
MOV DL,AL
XOR DH,DH
MOV BX,OFFSET TABLE
ADD BX,DX
MOV AL,[BX]
MOV CL,04H
MOV BL,AL
SHR AL,CL
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
AND BL,0FH
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
以上就是关于汇编程序,以BUF为首地址的内容存单元中有1~15的平方表。查表求X单元中数(1~15之间)的平方值并送回X单元全部的内容,包括:汇编程序,以BUF为首地址的内容存单元中有1~15的平方表。查表求X单元中数(1~15之间)的平方值并送回X单元、MCS-51单片机查表程序、采用汇编语言,设某一变量的数据保存在片内RAM的30H单元中,取值范围为00H-09H,编写一查表程序,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)