用汇编语言编写程序,建立一数据表,表中存放1-9的平方,查表求某数字的平方。

用汇编语言编写程序,建立一数据表,表中存放1-9的平方,查表求某数字的平方。,第1张

程序如下:

;--------------------------------------------------------------------

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制作简易查询接口、单片机 查表法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9669566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存