您现在的位置是: 首页 > 体育百科 体育百科

篮球比赛计分器设计_篮球比赛计分器汇编语言

tamoadmin 2024-08-17 人已围观

简介1.汇编语言 中文注释(兄弟答辩用的,谢过诸位了先)2.急急急!!谁能帮我分析一下这个单片机汇编语言程序,写出每步的作用。急急急!!3.汇编语言程序设计中使用哪种软件工具(汇编语言软件有哪些)4.单片机时钟和倒计时器的汇编语言代码,哪位大侠能给出每个语句的注释解释,感激不尽5.汇编语言寄存器都叫什么?6.足球场上的电子计分板的功能7.C语言和汇编语言的区别是什么?8086有4个16位的通用寄存

1.汇编语言 中文注释(兄弟答辩用的,谢过诸位了先)

2.急急急!!谁能帮我分析一下这个单片机汇编语言程序,写出每步的作用。急急急!!

3.汇编语言程序设计中使用哪种软件工具(汇编语言软件有哪些)

4.单片机时钟和倒计时器的汇编语言代码,哪位大侠能给出每个语句的注释解释,感激不尽

5.汇编语言寄存器都叫什么?

6.足球场上的电子计分板的功能

7.C语言和汇编语言的区别是什么?

篮球比赛计分器设计_篮球比赛计分器汇编语言

8086有4个16位的通用寄存器(AX、BX、CX、DX),4个16位的指针与变址寄存器(BP、SP、SI、DI),4个16位的段寄存器(CS、DS、SS、ES),一个指令指针寄存器(IP)及一个标志寄存器(PSW)。

AX BX CX DX是CPU内部的通用寄存器中的数据寄存器,数据寄存器一般用于存放参与运算的数据或运算的结果,每一个数据寄存器都是16位的(即16个二进制位),但又可以将高,低8位分别作为两个独立的8位寄存器使用.它们的高8位记作AH,BH,CH,DH,低8位记作AL,BL,CL,DL.这种灵活的使用方法给编程带来极大的方便,既可以处理16位数据,也能处理8位数据.

数据寄存器除了作为通用寄存器使用外,它们还有各自的习惯用法

AX 称为累加器,常用于存放算术逻辑运算中的操作数,另外所有的I/O指令都使用累加器与外设接口传送信息

BX 称为基址寄存器,常用来存放访问内在时的基地址,

CX 称为计数寄存器,在循环和串操作指令中用作计数器

DX 称为数据寄存器,在寄存器间接寻址中的I/O指令中存放I/O端口的地址

另外,在做双字长乘除法运算时,DX 与AX合起来存放一个双字长数(32位),其中DX存放高16位,AX存放低16位.

18年Intel公司推出16位微处理器8086。8086是一种具有代表性的处理器,后续推出的各种处理器均保持与之兼容。8086CPU用HMOS工艺,片上集成2.9万个晶体管,引脚为双列直插式,有40个引脚,内外总线都为16位,是真正的16位CPU。其中有20位地址线,可直接寻址1M空间。

为了兼容市场上的8位微机,Intel公司又推出了8086的改进型8088处理器。它的内部总线为16位,外部总线为8位,地址线为20位,指令系统与8086系统兼容,是准16位机。

上图:8086CPU的内部结构框图(像)

从功能上划分,CPU内部可划分为总线接口单元BIU(Bus Interface Unit)与执行单元EU(Execution Unit):

总线接口单元BIU

BIU负责CPU与存储器、外设之间的数据传送,包括存储器读写,I/O接口读写以及取指令。

BIU由段寄存器(CS、DS、SS、ES)、指令指针寄存器(IP)、地址加法器、内部寄存器、指令队列缓冲器及I/O控制逻辑等部分组成。

2. 指令执行单元部件EU

EU负责指令执行,它由通用寄存器组、专用寄存器组、算术逻辑运算单元(ALU)、标志寄存器(FR)和内部控制逻辑组成。

从上可看出,BIU负责完成取指令与存取操作数,即CPU所有与外部总线有关的操作均由其完成。而EU则负责分析、执行指令,并不需与CPU外部总线直接发生联系,其所需的数据和所产生的结果都通过BIU接收或传送到外部总线。BIU与EU两个单元一起并行工作,使得取指令与执行指令的操作并行进行,从而大大提高了工作效率。

图中的8086有4个16位的通用寄存器(AX、BX、CX、DX),4个16位的指针与变址寄存器(BP、SP、SI、DI),4个16位的段寄存器(CS、DS、SS、ES),一个指令指针寄存器(IP)及一个标志寄存器(PSW)。

通 用

寄存器

15 - 8 7 - 0

累 加 器(AX) AH AL

基址寄存器(BX) BH BL

计 数 器(CX) CH CL

数据寄存器(DX) DH DL

指 针

和变址

寄存器

15 - 0

堆栈指示器(SP) SP

基址指示器(BP) BP

源 变址 器(SI) SI

目的变址器(DI) DI

控 制

寄存器 15 - 0

指令指示器(IP) IP

标志寄存器(FR) FR

段寄存器 15 - 0

代码段寄存器(CS) CS

数据段寄存器(DS) DS

堆栈段寄存器(SS) SS

附加段寄存器(ES) ES

注:

其中4个通用寄存器都可以拆成高8位与低8位两个寄存器来使用。

4个变址指针寄存器(SP、BP、SI、DI)中前两个称为“地址指针”,后两个称为“变址寄存器”。

通用寄存器的特殊用途和隐含性质

寄存器名 特殊用途 隐含性质

AX, AL 在输入输出指令中作数据寄存器用 不能隐含

在乘法指令中存放被乘数或乘积;

在除法指令中存放被除数或商 隐含

AH 在LAHF指令中,作目标寄存器用 隐含

AL 在十进制运算指令中作累加器用 隐含

在XLAT指令中作累加器用 隐含

BX 在间接寻址中作基址寄存器用 不能隐含

在XLAT指令中作基址寄存器用 隐含

CX 在串操作指令和LOOP指令中作计数器用 隐含

CL 在移位/循环移位指令中作移位次数计数器用 不能隐含

DX 在字乘法/除法指令中存放

乘积高位或被除数高位或余数 隐含

在间接寻址的输入输出指令中作地址寄存器用 不能隐含

SI 在字符串运算指令中作源变址寄存器用 隐含

在间接寻址中作变址寄存器用 不能隐含

DI 在字符串运算指令中作目标变址寄存器用 隐含

在间接寻址中作变址寄存器用 不能隐含

BP 在间接寻址中作基址指针用 不能隐含

SP 在堆栈操作中作堆栈指针用 隐含

注:EU中设计了一个16位的标志寄存器,用来存放程序状态字PSW(Program Status Word)。PSW中一共定义了9个有效位。

PSW的标志位

OF DF IF TF ZF AF PF CF

注:最左边的代表PSW的最高位,最右边(CF)的代表最低位。

PSW中标志位的用法及含义

标志位 用法及含义

DF 方向控制(Direction Flag)位

若设置DF=1,则串操作后,源和目的操作数的地址均向增址方向调整;若设置DF=0,则向减址方向调整。

IF 中断允许控制(Interrupt Enable Flag)位

若设置IF=1,则允许CPU响应可屏蔽中断(开中断);若IF=0,则不允许CPU响应可屏蔽中断(关中断)。

TF 陷井控制(Trap Flag)位

若设置TF=1,则将在CPU运行中设置陷井,此时,CPU每执行一条指令就产生一个单步中断,用户可以在中断服务中对当前指令的执行情况进行调试;若TF=0,表示不设置陷井。该标志主要用于程序的单步调试。

OF 溢出标志(Overflow Flag)位。它反映有符号数的运算结果是否超出其所能表示的范围;字运算的范围为-32768~+32767,字节运算的范围为-128~+127。若OF=1,则表示结果溢出;OF=0,表示结果未溢出。注意,OF标志主要针对有符号运算。

符号标志(Sign Flag)位。它反映运算结果的最高有效位(MSB)为0、还是为1;对有符号运算来说,它反映了运算结果为正、还是为负。若=1,反映运算结果的最高有效位为1(或结果为负);若=0,则表示最高有效位为0(或结果不为负)。

ZF 零标志(Zero Flag)位。反映运算结果是否为全0。若ZF=1,则表示运算结果为全0(各位均为0);若ZF=0,表示运算结果非全0(各位不全为0)。

AF 标志(Auxiliary Flag)位。该标志主要用于BCD码运算后的调整。它反映运算中低四位向前(即D3向D4)有无进位(针对加运算)或借位(针对减运算)。若AF=1,表示有进位或借位;若AF=0,表示无进位或借位。

PF 校验标志(Parity Flag)位。反映运算结果中1的个数是否为偶数。若PF=1,表示运算结果中有偶数个1;若PF=0,表示结果中有奇数个1。

CF 进位标志(Carry Flag)位。它反映运算中最高有效位(字运算时为D15、字节运算时为D7位)向前有无进位(针对加运算)或借位(针对减运算)。若CF=1,表示有进位或借位;若CF=0,表示无进位或借位。CF标志主要针对无符号运算。

注:DF、 IF、 TF为控制标志位,用户可以通过指令设置它们为0或1。从而控制CPU的状态。OF、、 ZF、 AF、 PF、CF 为状态标志位,它们记录程序的运行状态,通过对它们的判断决定程序

汇编语言 中文注释(兄弟答辩用的,谢过诸位了先)

这个程序对于初学者来说综合性比较高。由于程序比较长,就不一一写出了。首先你可以定义三个8位寄存器如R2,R3,R4作为计数的分,秒,百分之一秒为、十分之一秒位。程序初始化设置相应的定时器模式和外部中断方式,打开相应的中断。用定时器产生一个10ms的中断开始计数。用外部中断控制计时,你可以设置一个标志位,没按下一次按键,标志位取反,就能控制计数的继续和暂停。至于时间清零,就很简单了,判断某一管脚为1或0时,上面三个8位寄存器如R2,R3,R4全部清零就行了。

急急急!!谁能帮我分析一下这个单片机汇编语言程序,写出每步的作用。急急急!!

DA_IN: 数据或指令

;RS_STU: 数据指令选择

;WR_COUNT1: 计数器1

;WR_COUNT2: 计数器2

SERIAL_WR: PUSH ACC;A入堆栈保护

MOV A,DA_IN

SETB CS;将CS置1(程序中未定义CS,故不知其作用)

MOV WR_COUNT1,#05H;计数器1置初值5

SETB STD ;将STD置1,标识写数据(程序中未定义STD,故不知其作用,由后面推测可能是用于标识写数据和指令的)

SERIAL_WR1: CLR SCLK;将SCLK置0(程序中未定义CS,故不知其作用)

SETB SCLK;将SCLK置1

DJNZ WR_COUNT1,SERIAL_WR1;计数器1不为0转SERIAL_WR1处

CLR STD ;将STD置0,标识写指令

CLR SCLK;将SCLK置0

SETB SCLK;将SCLK置1

JNB RS_STU,CLR_RS;RS_STU为0(选择为指令)则转CLR_RS处

SETB STD ;RS_STU为1(选择为数据)将STD置1,标识写数据

SJMP SETB_RS;转SETB_RS处

CLR_RS: CLR STD ;将STD置0,标识写指令

SETB_RS: CLR SCLK;将SCLK置0

SETB SCLK;将SCLK置1

CLR STD ;将STD置0

CLR SCLK;将SCLK置0

SETB SCLK;将SCLK置1

MOV WR_COUNT1,#02H;

SERIAL_WR2: MOV WR_COUNT2,#04H;计数器1置初值4

SERIAL_WR21:RLC A;A带进位位循环右移一位

MOV STD,C;C送入STD(即A的最高位送入STD)

CLR SCLK;将SCLK置0

SETB SCLK;将SCLK置1

DJNZ WR_COUNT2,SERIAL_WR21;计数器2不为0转SERIAL_WR21处

MOV WR_COUNT2,#04H;计数器2为0则再置初值4

CLR STD ;将STD置0

SERIAL_WR22:CLR SCLK;将SCLK置0

SETB SCLK;将SCLK置1

DJNZ WR_COUNT2,SERIAL_WR22;计数器2不为0转SERIAL_WR22处

DJNZ WR_COUNT1,SERIAL_WR2;计数器2为0但计数器1不为0转SERIAL_WR2处

CLR SCLK;计数器1为0则将SCLK置0

CLR CS;将CS置0

LCALL DELAY;调用子程序DELAY(延时)

POP ACC;恢复A

RET;返回

另一个

SUB1:JB BUSY,SUB1;设备忙则等待

MOV P0,A;由P0口输出A中数据

NOP ;空操作

SETB REQ;将REQ置1 (程序中未定义REQ,故不知其作用,可能是所用设备中的一个状态标志位)

HE3:JNB BUSY,HE3 ;设备不忙则转HE3处

CLR REQ ;将REQ置0

RET ;返回

HANZI:

MOV A,#0F0H ;数据0F0H送A

ACALL SUB1 ;调用子程序SUB1(输出数据0F0H)

MOV A,#02H ;数据02H送A

ACALL SUB1 ;调用子程序SUB1(输出数据02H)

MOV A,#00H ;数据00H送A

ACALL SUB1;调用子程序SUB1(输出数据00H)

MOV A,#10H ;数据10H送A

ACALL SUB1;调用子程序SUB1(输出数据10H)

MOV A, #01H ;数据01H送A

ACALL SUB1;调用子程序SUB1(输出数据01H)

RET;返回

ASC:

MOV A,#0F1H ;数据0F1H送A

LCALL SUB1 ;调用子程序SUB1(输出数据0F1H)

MOV A,50H ;50H单元中数据0F1H送A

LCALL SUB1;调用子程序SUB1(输出50H单元中数据)

MOV A,51H ;51H单元中数据0F1H送A

LCALL SUB1 ;调用子程序SUB1(输出51H单元中数据)

MOV A,52H ;52H单元中数据0F1H送A

LCALL SUB1;调用子程序SUB1(输出52H单元中数据)

RET;返回

A\D转换

程序设计

AD: MOV 20H,#00H ;数据00H送20H单元

MOV 21H,#00H ;数据00H送21H单元

CLR CLK;将CLK置0

MOV R7,#0AH;;数据0AH送R7

CLR CS;将CS置0

NOP;空操作

LP01: MOV C,DAT;将DAT送入进位位C

MOV A,20H;将20H单元中数送入A

RLC A;A带进位位循环左移一位

MOV 20H,A;A中内容送入20H单元

MOV A,21H;将21H单元中数送入A

RLC A;A带进位位循环左移一位

MOV 21H,A;A中内容送入21H单元(至此是将21H20H整体左移了一位,DAT状态移入20H单元的最低位)

SETB CLK;将CLK置1

CLR CLK;将CLK置0

DJNZ R7,LP01;R7不为0则转LP01处

SETB CS;将CS置1

MOV 22H,20H;20H单元内容送入22H单元

MOV 23H,21H;21H单元内容送入23H单元

RET;返回

change: LCALL AD;调用子程序AD(A\D转换)

MOV 40H,20H;20H单元内容送入40H单元

MOV 41H,21H;21H单元内容送入41H单元

MOV A,41H;41H单元内容送入A

RRC A;A带进位位循环右移一位

MOV 41H,A;A内容送入41H单元

MOV A,40H;40H单元内容送入A

RRC A;A带进位位循环右移一位

MOV 40H,A;A内容送入40H单元

MOV A,41H;41H单元内容送入A

RRC A;A带进位位循环右移一位

MOV 41H,A;A内容送入41H单元

MOV A,40H;40H单元内容送入A

RRC A;A带进位位循环右移一位

MOV 40H,A;A内容送入40H单元(至此41H40H单元内容整体右移了2位,或说是缩小了4倍)

MOV 41H,40H ;40H单元内容送入41H单元

MOV 40H,#00H;40H单元清0

LCALL AD;调用子程序AD(A\D转换)

MOV 40H,20H;20H单元内容送入40H单元

MOV 41H,21H;21H单元内容送入41H单元

MOV 40H,20H;20H单元内容送入40H单元

MOV 41H,21H;21H单元内容送入41H单元

MOV 41H,40H;40H单元内容送入41H单元

MOV 40H,#00H;40H单元清0

MOV A,#5;将数据5送入A

MOV B,41H;41H单元内容送入B

mul ab;A*B

mov 33h,b;积的高8位送入33H单元

ret;返回

汇编语言程序设计中使用哪种软件工具(汇编语言软件有哪些)

虽然没有楼上动作快,但既然也做了就发上来参考吧,应该比楼上的更具体写,比如P1.5干嘛啊。 :)

__________________________________________________________________

整体描述:同时在P1.0 和 P1.1输出反相的占空可调的方波

占空比调整通过修改变量M 来设定,变量AS用来做内部循环量,范围0-M

P1.5使用闪烁的方式来显示对于M设定的占空比值的非法告警

调整占空比设定M通过int0 和P1.2来 进行加一和减一的设定 ,通过int1 和P1.2来 进行加五和减五的设定

设定的M值通过连接在P0,P2口的两个LED来显示,方式10进制单位显示

COUNT EQU 30H //没用的变量

AS EQU 30H //timer1内占空比计数

M EQU 35H //占空比计数上限设定

ORG 0000H

LJMP START

ORG 0003H //int0中断服务入口 占空比1步进

LJMP INT00

ORG 0013H //int1中断服务入口 占空比5步进

LJMP INT11

START: SETB EX0 //初始化开始

SETB PX0

SETB IT0

SETB EX1

CLR PX1

SETB IT1

SETB EA

CLR P1.5 //P1.5显示设定占空比数字非法时闪烁告警

MOV TMOD,#21H //使用timer0 模式1和timer1 模式2

MOV TH1,#38H //timer1做占空部分控制,即高低电平时间控制

MOV TH0,#0B1H //timer0做方波周期

MOV TL0,#0E0H

SETB TR0

SETB TR1

MOV DPTR,#TABLE //LED段码地址

MOV M,#50 //占空比上限初值

MOV P0,#3FH //占空比10进低位 LED段码

MOV P2,#6DH //占空比10进高位 LED段码

MOV AS,#0 //占空比计数变量

TOP:SETB TR1 //**新的一个方波周期从这里开始**

SETB P1.0 //P1.0和P1.1分别输出反相的等周期方波

CLR P1.1 //

MOV TH0,#0B1H //timer0计数值、即方波周期值设定

MOV TL0,#0E0H

MOV AS,#0 //高电平时间计数变量初值每个timer1溢出加一(最大等于M)

MOV B,#10 //没用

MOV A,M

MOV B,#100

DIV AB

JZ TIME1 //如果设定的M值在01-99(可以理解为可接受的值,占空比最少1:99最多99:1)

MOV B,#10

CLERK:SETB P1.5 //设定的占空比值非法,则闪烁P1.5告警

LCALL DELAY

CLR P1.5

LCALL DELAY

SETB P1.5

LCALL DELAY

CLR P1.5

MOV M,#50 //自动重新设定默认占空比

LCALL SHOW //LED显示M,即当前设定占空比的值

LJMP TOP //重新 开始新懂得方波周期

TIME1:JBC TF1,NEXT //等待timer1 溢出标志

SJMP TIME1

NEXT:INC AS //每次溢出变量AS加一,

MOV A,M

CJNE A,AS,TIME1 //直到AS=M ,即占空计数达到,

CLR P1.0 //波形反相

SETB P1.1

CLR TR1 //关闭timer1,波形在timer0控制的一个周期内不再变化

TIME0:JBC TF0,TOP

SJMP TIME0 //timer0溢出,开始下一个周期波形

INT00:JNB P1.2,LOOP1 //外部中断0中断处理

INC M //当int0 为低电平且P1.2为高则M增加1,每次机器响应int0都加一,直到int0消失

LCALL SHOW //LED显示M,即当前设定占空比的值

RETI

LOOP1:DEC M //当int0 为低电平且P1.2为低则M减1,每次机器响应int0都减一,直到int0消失

LCALL SHOW //LED显示M

RETI

INT11:JNB P1.2,LOOP //外部中断1中断处理

MOV A,M

ADD A,#5 //当int1 为低电平且P1.2为高则M增加5,每次机器响应int0都加五,直到int0消失

MOV M,A

LCALL SHOW //LED显示M

RETI

LOOP:MOV A,M

SUBB A,#5 //当int1 为低电平且P1.2为高则M减少5,每次机器响应int0都减五,直到int0消失

MOV M,A

LCALL SHOW //LED显示M

RETI

SHOW:MOV A,M //M /10 AB 内分别是商和余数

MOV B,#10

DIV AB

MOVC A,@A+DPTR //查表显示余数

MOV P2,A

MOV A,B

MOVC A,@A+DPTR //查表显示商

MOV P0,A

MOV B,#10 //没用

RET

DELAY:MOV R6,#0FFH //延时函数

DEY1:MOV R7,#0FFH

DEY2:MOV R5,#3

DJNZ R5,$

DJNZ R7,DEY2

DJNZ R6,DEY1

RET //延时结束

TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //LED段码表

END

单片机时钟和倒计时器的汇编语言代码,哪位大侠能给出每个语句的注释解释,感激不尽

1、MASM。

微软公司为x86微处理器家族开发的汇编开发环境,拥有可视化的开发界面,使开发人员不必再使用DOS环境进行汇编的开发,编译速度快,支持80x86汇编以及Win32Asm,是Windows下开发汇编的利器。

2、NASM。

全称TheNetwideAssembler,是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。

3、TASM。

Borland公司开发的汇编编译器,被广泛用于TurboC,QuickBasic等编译器,用作中间过渡编译。它也能独立的编译纯汇编或是Win32Asm的代码。具有编译快速,高效的特点,至今依然是汇编开发的首选利器。

4、GAS。

GNU汇编器(GNUAssembler),简称为GAS,是由GNU所使用的汇编器,GNU的核心精神是自由与分享,所以GAS亦是自由软件。

5、RadASM。

一款著名的WIN32汇编编辑器,支持MASM、TASM等多种汇编编译器,Windows界面,支持语法高亮,自带一个编辑器和一个调试器。拥有较强的工程管理功能,加之众多插件的支持,使得它用汇编语言编写Windows软件变得得心应手。

汇编语言寄存器都叫什么?

ORG 0000H;程序起始于地址0000H,(一般不这样用)

LJMP MAIN;跳到主程序MAIN

ORG 000BH;外部中断INT0程序的地址,此为规定的

LJMP INTT0;跳到外部中断INTT0程序

ORG 001BH;外部中断INT1程序的地址,此也为规定的

LJMP INTT1;跳到外部中断INTT1程序

ORG 0100H;主程序MAIN地址

MAIN: MOV SP,#60H;给堆栈指针SP附内部数据存储器地址60H

MOV 31H,#0;给31H地址内清零即(31H)=0

MOV 20H,#0FEH ;(20H)=11111110B

MOV 21H,#0FFH;(21H)=11111111B

MOV P1,20H;P1=11111110B

LCALL SHEZHI1;调用程序段SHEZHI1

MOV 20H,#0FDH;(20H)=11111101B

MOV P1,20H;P1=11111101B

MOV 40H,#10;(40H)=0AH

SETB EA;开总中断

SETB ET0;开定时中断T0

MOV TMOD,#11H;设置T0工作于定时方式1

MOV TH0,#3CH;定时初值设置高位

MOV TL0,#0B0H;定时初值设置低位

SETB TR0;允许T0中断

LL: LCALL KEY;调用KEY

LCALL KEYC;调用KEYC

SJMP LL;循环调用回LL

INTT0: PUSH ACC;将ACC值压栈

PUSH PSW;将PSW值继续压栈

SETB RS1;RS1位置1

SETB RS0;RS0位置1,即选中内部数据存储器组的3组

DJNZ 40H,DOWN;判断十次结束否?且计数值自减一,若没有够十次,则转入程序DOWN , 否则顺序执行

MOV 40H,#10;继续在(40H)存入计数值十

MOV R0,#41H;(R0)=41H

MOV A,@R0 ; 判秒是否到60

ADD A,#1;A中值加一

DA A;十进制调整

MOV @R0,A;再送回原单元

CLR C;清进位位

SUBB A,#60H;与60相减

JC DOWN;通过判断进位位看是否到60了,没到就去DOWN,到了就顺序执行

MOV @R0,#0;41H单元清零

INC R0;地址自加一

MOV A,@R0 ; 判分是否到60

ADD A,#1

DA A

MOV @R0,A

CLR C

SUBB A,#60H

JC DOWN

MOV @R0,#0

INC R0

MOV A,@R0 ; 判时是否到24

ADD A,#1

DA A

MOV @R0,A

CLR C

SUBB A,#24H

JC DOWN

MOV @R0,#0

INC R0

MOV A,@R0 ; 判日是否到指定天数

ADD A,#1

DA A

MOV @R0,A

INC R0

MOV A,@R0

MOV R4,A ;月份送R4,本月天数送R5

JNB ACC.4,NEXT2

CLR C

SUBB A,#06H

NEXT2: MOV DPTR,#DAYTAB

DEC A

MOVC A,@A+DPTR

MOV R5,A

CJNE R4,#2,NEXT

JNB 08H,NEXT1

NEXT: INC R5

NEXT1: DEC R0

MOV A,R5

CLR C

SUBB A,@R0

JNC DOWN

MOV @R0,#1

INC R0

MOV A,@R0 ; 判月是否到13

ADD A,#1

DA A

MOV @R0,A

CLR C

SUBB A,#13H

JC DOWN

MOV @R0,#1

INC R0

MOV A,@R0 ; 判年低位是否到00

ADD A,#1

DA A

MOV @R0,A

INC R0

MOV A,@R0

ADDC A,#0

DA A

MOV @R0,A

DOWN: MOV A,#42H

CJNE A,4EH,DOWN2

MOV A,#43H

CJNE A,4FH,DOWN2

CLR 07H

DOWN2: JB 06H,DOWN4

DOWN4: CLR TR0

MOV A,#0B7H

ADD A,TL0

MOV TL0,A

MOV A,#3CH

ADDC A,TH0

MOV TH0,A

SETB TR0

POP PSW

POP ACC

RETI

DAYTAB: DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H

足球场上的电子计分板的功能

1、寄存器

32位寄存器有16个,分别是:

4个数据寄存器(EAX、EBX、ECX、EDX)。

2个变址和指针寄存器(ESI和EDI);2个指针寄存器(ESP和EBP)。

6个段寄存器(ES、CS、SS、DS、FS、GS)。

1个指令指针寄存器(EIP);1个标志寄存器(EFlags)。

2、数据寄存器

数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位通用寄存器:EAX、EBX、ECX和EDX。对低16位数据的取存,不会影响高16

位的数据,这些低16位寄存器分别命名为AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:ah~al、BX:bh~bl、CX:ch~cl:DX:dh~dl)。

每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可合可分”的特性,灵活地处理字/

字节的信息。

AX和al通常称为累加器,用累加器进行的操作可能需要更少时间,累加器可用于乘、除、输入/输出等操作,

它们的使用频率很高。

BX称为基地址寄存器,它可作为存储器指针来使用。

CX称为计数寄存器,在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用cl来

指明位移的位数。

DX称为数据寄存器,在进行乘、除运算时,它可以为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU

中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据、保存算术逻辑运算结果,而且也可

作为指针寄存器,所以,这些32位寄存器更具有通用性。

3、变址寄存器

32位CPU有2个32位通用寄存器ESI和EDI,其低16位对应先前CPU中的SI和DI,对低16位数据的

存取,不影响高16位的数据。

ESI、EDI、SI和DI称为变址寄存器,它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器

操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

变址寄存器不可分割成8位寄存器,作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们可作一般的存储器指针使用,在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的

功能。

4、指针寄存器

32位CPU有2个32位通用寄存器EBP和ESP,其低16位对应先前CPU中的BP和SP,对低16位数

据的存取,不影响高16位的数据。

EBP、ESP、BP和SP称为指针寄存器,主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器

操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

指针寄存器不可分割成8位寄存器,作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。

它们主要用于访问堆栈内的存储单元,并且规定:

BP为基指针寄存器,用它可直接存取堆栈中的数据。

SP为堆栈指针寄存器,用它只可访问栈顶。

5、段寄存器

段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成

的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。

32位CPU有6个段寄存器,分别如下:

CS:代码段寄存器 ES:附加段寄存器

DS:数据段寄存器 FS:附加段寄存器

SS:堆栈段寄存器 GS:附件段寄存器

在16位CPU系统中,只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问,在

32位微机系统中,它有6个段寄存器,所以在此环境下开发的程序最多可同时访问6个段。

32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的,有关规定

简单描述如下:

实方式:段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑

地址仍为“段地址:偏移地址”的形式,为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移地址。

保护方式:在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”的某个值。

6、指令指针寄存器

32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。

指令指针EIP、IP是存放下次将要执行的指令在代码段的偏移地址,在具有预取指令功能的系统中,下次要执

行的指令通常已被预取到指令队列中,除非发生转移情况,所以,在理解它们的功能时不考虑存在指令队列的情

况。

在实方式下,由于每个段的最大范围为64KB,所以,EIP的高16位肯定都为0,此时,相当于只用其低16

位的IP来反映程序中的指令的执行次序。

7、标志寄存器

1.运算结果标志位。一共6个,包括:CF进位标志位、PF奇偶标志位、AF进位标志位、ZF零标志位、

符号标志位、OF溢出标志位。

2.状态控制标志位。一共3个,包括:TF追踪标志位、IF中断允许标志位、DF方向标志位。

以上标志位在第7章里都讲过了,在这里就不再解释了,现在讲讲32位标志寄存器增加的4个标志位。

1. I/O特权标志IOPL。

IOPL用两位二进制位来表示,也称为I/O特权级字段,该字段指定了要求执行I/O指令的特权级,如果当前

的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。

2. 嵌套任务标志NT。

NT用来控制中断返回指令IRET的执行。具体规定如下:

(1) 当NT=0,用堆栈中保存的值恢复EFlags、CS和EIP,执行常规的中断返回操作。

(2) 当NT=1,通过任务转换实现中断返回。

3. 重启动标志RF。

RF用来控制是否接受调试故障。规定:RF=0时,表示接受,否则拒绝。

4. 虚拟8086方式标志VM。

如果VM=1,表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

8、32位地址的寻址方式

最后说一下32位地址的寻址方式。在前面我们学习了16位地址的寻址方式,一共有5种,在32位微机系统

中,又提供了一种更灵活、方便但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为

偏移地址的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、

EDX、ESI、EDI、EBP、和ESP)都可以是偏移地址的一个组成部分。

当用32位地址偏移量进行寻址时,偏移地址可分为3部分:

1. 一个32位基址寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)。

2. 一个可乘以1、2、4、8的32位变址寄存器(EAX、EBX、ECX、EDX、ESI、EDI和EBP)。

3. 一个8位~32位的偏移常量。

比如,指令:mov ebx, [eax+edx*2+300]

Eax就是基址寄存器,edx就是变址寄存器,300H就是偏移常量。

上面那3部分可进行任意组合,省去其中之一或之二。

下面列举几个32位地址寻址指令:

Mov ax, [123456]

Mov eax, [ebx]

Mov ebx, [ecx*2]

Mov ebx, [eax+100]

Mov ebx, [eax*4+200]

Mov ebx, [eax+edx*2]

Mov ebx, [eax+edx*4+300]

Mov ax, [esp]

由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定,具体

规定如下:

1. 地址中寄存器的书写顺序决定该寄存器是基址寄存器还是变址寄存器。

如:[ebx+ebp]中的ebx是基址寄存器,ebp是变址寄存器,而[ebp+ebx]中的ebp是基址寄存器,ebx是变

址寄存器,可以看出,左边那个是基址寄存器,另一个是变址寄存器。

2. 默认段寄存器的选用取决于基址寄存器。

3. 基址寄存器是ebp或esp时,默认的段寄存器是SS,否则,默认的段寄存器是DS。

4. 在指令中,如果显式地给出段寄存器,那么显式段寄存器优先。

下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

指令列举:? 访问内存单元所用的段寄存器

mov ax, [123456] ;默认段寄存器为DS。

mov ax, [ebx+ebp] ;默认段寄存器为DS。

mov ebx, [ebp+ebx] ;默认段寄存器为SS。

mov ebx, [eax+100] ;默认段寄存器为DS。

mov edx, ES:[eax*4+200] ;显式段寄存器为ES。

mov [esp+edx*2], ax ;默认段寄存器为SS。

mov ebx, GS:[eax+edx*8+300] ;显式段寄存器为GS。

mov ax, [esp] ;默认段寄存器为SS。

C语言和汇编语言的区别是什么?

记分与计时

计分板(英语:Scoreboarding)是CDC 6600计算机中的流水线处理器所用到的一种技术,该方法主要将顺序执行的汇编语言代码进行动态调度,从而实现高效、无误的乱序执行。

计分板机制会记录、分析不同指令之间的数据相关性。只有当一条指令与之前已发射(issue)的指令之间的冲突消失之后,这条指令才会被发射、执行。如果某条指令由于数据冲突而停顿,计分板会监视正在执行的指令流,在所有数据相关性造成的冲突化解之后通知停顿的指令开始执行。

区别如下:

(1)两者编译组成不同。汇编语言是将由0、1组成的机器语言用具有简单语义的英文代码表示,而C语言不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等。

(2)两者被计算机识别的路径不同。汇编语言通常用于对硬件的直接操控。而且C语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行。

(3)两者用处不同。汇编语言通常用在程序中最核心的、控制硬件的代码,一方面是安全,另一方面提高运行速度。而C语言通常用在计算机外用功能上。

(4)两者学习难易程度不同。汇编语言所需要的编绘知识很多很复杂,经常被开发者使用。而C语言是一门很简单方便的语言,编程者也就不需要有太多的专业知识。

计算机语言(Computer Language)指用于人与计算机之间通讯的语言。计算机语言是人与计算机之间传递信息的媒介。计算机系统最大特征是指令通过一种语言传达给机器。计算机语言从低级到高级可以分为:?

(1)机器语言,即由0、1组成的机器硬件可以识别的语言;?

(2)低级语言,即汇编语言?

(3)中级语言,如C语言?

(4)高级语言,如C++,JAVA,C#等。

扩展资料:

如今通用的编程语言有两种形式:汇编语言和高级语言。

汇编语言和机器语言实质是相同的,都是直接对硬件操作,只不过指令用了英文缩写的标识符,容易识别和记忆。源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

高级语言是绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

高级语言主要是相对于低级语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如流行的vb、vc、foxpro、delphi等,这些语言的语法、命令格式都各不相同。

高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:解释类和编译类。

参考资料:

计算机语言_百度百科