程序如下:
;--------------------------------------------------------------------
DATA SEGMENT
; 数据表格
TABLE DW 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
DATA ENDS
;--------------------------
STACK SEGMENT
DW 128 DUP(0)
STACK ENDS
;--------------------------
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, SS: STACK
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
M_LOOP:
MOV AH, 1
INT 21H
CMP AL, 1BH
JZ EXIT
CMP AL, 30H
JL M_LOOP
CMP AL, 39H
JG M_LOOP
SUB AL, 30H
;------------------------------
MOV BX, TABLE
PUSH CX
SHL AL, 1
MOV AH, AL
INC AH
XLAT
MOV CL, AL
MOV AL, AH
XLAT
MOV CH, AL
MOV AX, CX
POP CX
;------------------------------
CALL CR_LF
CALL OUT_AX
CALL CR_LF
JMP M_LOOP
;------------------------------
EXIT:
MOV AX, 4C00H ;EXIT TO OPERATING SYSTEM
INT 21H
;--------------------------------------------
OUT_AX PROC NEAR
PUSH BX
MOV DL, 0
CALL OUT_ASC
MOV BL, 100
DIV BL
MOV DL, AL
CALL OUT_ASC
MOV AL, AH
XOR AH, AH
MOV BL, 10
DIV BL
MOV DL, AL
CALL OUT_ASC
MOV DL, AH
CALL OUT_ASC
POP BX
RET
OUT_AX ENDP
;--------------------------------------------
OUT_ASC PROC NEAR
ADD DL, 30H
CALL OUT_DL
RET
OUT_ASC ENDP
;--------------------------------------------
CR_LF PROC NEAR
MOV DL, 10
CALL OUT_DL
MOV DL, 13
CALL OUT_DL
RET
CR_LF ENDP
;--------------------------------------------
OUT_DL PROC NEAR
PUSH AX
MOV AH, 02H
INT 21H
POP AX
RET
OUT_DL ENDP
;--------------------------------------------
CODE ENDS
END START
------------------------------------------------------------------
不会搭建项目的同学请点开我个人中心看我第一篇springboot的博客
前两章我们做了登陆注册,按照程序下边登陆后应该要查询数据,所以抽出两章来做查询以及链表查询
本章先来做一个简单的查询功能
首先建表添加数据
由于查询表内所有内容,返回数据有可能是多行,所以返回值是 List
由于只有一个get方法,所以用指定别名,只需要@GetMapping!
返回值
大家发现这个查询过于简单,如果有一个需求,需要查询a表的时候带出b表对象,也就是外键约束,怎么来做?我们下长讲解
bilibili视频教程同步更新
0100H、0200H表示的都是51单片机程序存贮器里面的地址,51单片机可寻址最大64k程序存贮器、最大64k内存。程序存贮器和内存不是统一编址。
PC时程序计数器,主要是记录单片机在ROM的执行位置,一般单片机可以访问64K的地址,也就是需要16位的字宽
单片机编址是16进制,看看编程器里怎样表示的。
ORG 0100H 表示程序从这里开始执行
DPTR是一个16位的寄存器,对这个数据寄存器赋值时,对于寄存器寻址方式,我们是把它拆分为高八位,低八位来访问的
由于它是16位,所以我们可以用它来访问64K的ROM空间,也可以访问64K的外表RAM空间
ORG 0200H 表示存放数据的地址从这里开始,这个地址是程序存贮器地址,不可以在运行中改变。
SQU是查表子程序的编号,主程序调用这段查表程序需 LCALL SQU,这时候单片机的pc指向0101h,单片机从0101h开始执行指令 。
第一个:1002H的命令MOV A,@A+PC ,此时PC=1003H(PC指向下一条程序单元),A+PC=0DH+1003H=1010H,把1010H作为地址的内容赋给A,1010H内容是30H,所以A的结果就是30H
第二个:1003H命令行,把A赋值给R0,结果自然R0=30H
第三个:程序运行到1003H,PC指向下一条命令地址,1004H
希望对你有帮助
1表格中存放了1024个数据,编号0-1023项。每个数据2个字节。
2R3,R2,构成16位的编号。二进制格式。编号为x。
3第x项的数据起始地址应为 TAB+(2x)。
42x,其实就是左移一次x。由于x是16位的。但51没有16位循环左移指令。
5借助于A,利用带进位位循环左移RLC A指令,完成R3,R2左移一次。其中,低位的R2部分,左移时,R2最高位借助于Cy进位位补足到R3的最低位。
理解一下RLC A这条指令的功能,影响的标志位就可以了。
51单片机汇编语言有一条查表指令是:MOVC A, @A+DPTR
它不是单独使用的,要和 DB 伪指令配套使用。
例如:若累加器A中有一个0~9的数,请用查表法求出该数的平方值,设平方表表头地址为1000H。
程序如下:
;-------------------------------------
MOV DPTR,#1000H
MOVC A,@A+DPTR
……
ORG 1000H
DB 0, 1, 4, 9, 16, 25
;-------------------------------------
“DB”,在ROM 1000H中,顺序存放了一系列的“平方”数据。
MOVC A,@A+DPTR指令中A如果等于0,就会在“平方”数据中取出第0个,就是0;
MOVC A,@A+DPTR指令中A如果等于1,就会在“平方”数据中取出第1个,就是1;
MOVC A,@A+DPTR指令中A如果等于2,就会在“平方”数据中取出第2个,就是4;
MOVC A,@A+DPTR指令中A如果等于3,就会在“平方”数据中取出第3个,就是9;
……
MOVC A,@A+DPTR指令中A如果等于9,就会在“平方”数据中取出第9个,就是81。
MOVC A,@A+PC
RET
DB: xxH,xxH,xxH
不懂的说,给你做个示范看懂没
用 MOVC A,@A+PC
不如用 MOVC A@A+DPTR
你肯定是为了考试是吧
哎!单片机是一门电子专业科可以说是电子艺术
以上就是关于用汇编语言编写程序,建立一数据表,表中存放1-9的平方,查表求某数字的平方。全部的内容,包括:用汇编语言编写程序,建立一数据表,表中存放1-9的平方,查表求某数字的平方。、SpringBoot制作简易查询接口、单片机 查表法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)