微机原理中 读端口的指令

微机原理中 读端口的指令,第1张

next: in al,60h

test al,02h

jz next

这段代码是从60h端口读进数据,并测试第一位(实际是我们常说的第二位,因为计算机从0开始计数),如果是0,说明外设没有准备好,继续等待并测试,如果为1,说明外设已经准备好了,可以进行数据交换了,该程序段放在数据交换前。

2.已知某存储单元的逻辑地址是5555H:2222H,其物理地址应是

5555H10H+2222H

=

57772H

对于这同一物理地址单元,若段基址改为5678H,则其偏移地址应是

57772H-5678H10H

=

FF2H

4.8088/8086CPU在指令中可以作为寄存器间接寻址访问存储单元的4个寄存器是

BX,BP,SI,DI

,除法指令中32位被除数应放在两个寄存器,高16位放在

DX,低16位放在

AX

6.已知(AX)=0045H,(BL)=08H(4%)

写出分别执行指令后相应寄存器的内容

a

MUL

BL

(AX)=

5000H

b

ADD

AL,BL

(这问应该和a是分开的吧)

DAA

(AX)=

0053H

1.

指出下列真值对应的原码和补码:

X=+1010110B

[X]原=

[X]补=

A只有A表示了正数

Y=―1010110B

[Y]原=

[Y]补=

D负数的补码是正数部分取反加一

A.01010110B

B.11010110B

C.10101001B

D.10101010B

2.已知堆栈指针(SP)=06A8H,

(4%)

⑴.若执行POP

BX指令,则(SP)=

E,pop指令执行后sp指针向后移动

⑵.若执行CALL

SBRT指令,则(SP)=

A,调用CALL会将pc指针压栈。所以sp指针向前移动

A.06A6H

B.06A7H

C.06A8H

D.06A9H

E.06AAH

你可以用debug看看。

3.对于下列指令正确者打√,非法指令打×。(4%)

⑴.SUB

1000H,

DI

(

×)目的 *** 作数不能为立即数

3)DIV15(×)

乘法不能乘以立即数

⑵.MOV

CX,

100H

(

√)

没问题

(4)ADD[AX]1234

(

×)

AX不能用作基址寄存器

1.将寄存器AX中内容通过移位的方法扩大1倍(假定原来AX内容不超过215)。

shl

ax,1

2.用一条串 *** 作指令完成下列程序段的功能。(4%)

JCXZ

PCS2

PCS1:

MOV

AL,

DS:[SI]

CMP

ES:[DI],AL

JNZ

PCS2

INC

SI

INC

DI

LOOP

PCS1

PCS2:

……

REPE

CMPS

1.PSW寄存器中SF、

ZF和OF的作用分别是什么?

SF作用是判断运算结果的符号,运算结果为负SF=1;

ZF作用是判断运算结果是否为0,运算结果为零ZF=1;

OF的作用是判断运算结果是否溢出,运算结果溢出时OF=1。

2.在执行减法运算指令后,再执行指令JA

NEXT与再执行指令JG

NEXT的区别是什么?

运行减法之后,sf会被置为相应的符号,表示是否为正数或者负数。

JA判断符号是否为0,而且判断zf是否为零,也就是说对两个符号进行判断

JG之判断SF

3.在DEBUG中,显示数据段从偏移地址0020H到003FH为止的存储单元内容应使用什么命令?

D0020

003F

写出 *** 作过程。若要修改0020H单元内容为55H,应使用什么命令?写出 *** 作过程。

E0020(回车)

55(回车)

1.指出下列程序完成的工作。

DSLR

MACRO

LOCAL

DONE

MOV

AH,

1

INT

21H

CMP

AL,

‘A’

JC

DONE

CMP

AL,

‘Z’

JA

DONE

MOV

DL,

AL

MOV

AH,02H

INT

21H

DONE:

NOP

ENDM

从键盘读入一个字符,如果该字符在大写字母A-Z之间,则显示该字符

否则结束

2.指出下列程序完成的工作。

MOV

AL,BUF

TEST

AL,

80H

JZ

DONE

NEG

AL

DONE:

MOV

BUF,AL

判断内存中以BUF为地址的8位内容,如果为负数,则对该数取反,然后送回该内存

否则直接送回该内存。

注意:这段程序不是求绝对值,因为求绝对值要减1之后取反

4.指出下列程序完成的工作。

DATA

SEGMENT

后面是什么???????????

TestAndSet

其实就是同步的是手段。textandset就是传入两个值与一个内存地址,让比较值与内存地址中的值相比较,如果一样就交换,不一样就不交换。返回值是内存地址中的值,整个过程是原子的。

而信号量则是当生产者写入后会设置资源数(也就是信号量),使其增加。以此来提醒消费者来读取,而当消费者读取后会将信号量减少。信号量有一个当前值与最大值。当前值不能小于零或者大于最大值,这就保证了reader不会读取无效内存,writer不会越界写值,发生缓冲区溢出。

用如下方法:

1、test1和test2表数据如下:

2、要将test1中的name替换成test2中同id的name,可用如下语句:

update test1 set name=test2name from test1 inner join test2 on test1id=test2id and test1id in (select id from test2);

3、运行后结果:其中:红框内数据即为修改后的数据。

扩展资料:

硬件同步由硬件同步电路向CPU提中断实现同步。硬件同步电路有多种形式,常见的如锁相环同步电路等。

软件同步由定时器中断实现,它首先测量电网周期T,然后根据周期T和每周期内的采样点数N确定定时器的定时值T/N。软件同步不需要专用的同步电路,与硬件同步相比其硬件结构简单,但它要求微机采样装置中具备电网频率跟踪测量环节。

异步采样又被称为定时采样或定频采样,它通过给定时器设置一固定的定时值,由定时器中断服务程序实现采样,它不需要任何附加硬件电路。

参考资料来源:百度百科-同步采样

random test

[ˈrændəm test]

随机测试,随机抽样检查

双语例句

1 Random Test Program Generation ( RTPG ) is one of the efficient ways to verify an instruction set

测试程序自动生成 ( RTPG ) 是微处理器指令集验证的主要方法之一

2 " They sampled 2, 000 people at random to test the new drink "

为了测试新型饮料,他们对2, 000人进行了随机抽样调查

3 Doing vehicle ride comfort random input running test, testing the ride comfort

进行平顺性随机输入行驶仿真试验, 测试车辆的行驶平顺性

4 The means of realization for overloading random vibration test was studied

研究了过载随机振动试验的实现手段

5 They sample 2, 000 people at random to test the new drink

他们随意请来了2, 000人来尝试这种新饮料

;Editor by zzy

;v1123

;

IOY0 EQU 0D400H ;片选IOY0端口始地址

IOY1 EQU 0D440H ;片选IOY1端口始地址

IOY2 EQU 0D480H ;片选IOY2端口始地址

IOY3 EQU 0D4C0H ;片选IOY3端口始地址

;

ADC0809 EQU IOY0+00H ;ADC0809端口地址

PA55 EQU IOY1+00H ;8255的A口地址

PB55 EQU IOY1+04H ;8255的B口地址

PC55 EQU IOY1+08H ;8255的C口地址

PCTL EQU IOY1+0CH ;8255的控制寄存器地址

DAC0832 EQU IOY2+00H ;DAC0832端口地址

TIMER0 EQU IOY3+00H ;8254计数器0端口地址

TIMER1 EQU IOY3+04H ;8254计数器1端口地址

TIMER2 EQU IOY3+08H ;8254计数器2端口地址

TCTL EQU IOY3+0CH ;8254控制寄存器端口地址

STACK1 SEGMENT STACK

DW 256 DUP()

STACK1 ENDS

DATA SEGMENT

STR1 DB 'Please input password:',0AH,0DH,'$'

STR2 DB 'The password is not right !!!Please try again!!!',0AH,0DH,'$'

STR3 DB 'Welcome to the signal creat machine',0AH,0DH,'Loading ADC0809',0AH,0DH,'$'

STR4 DB 'DIS',0AH,0DH,'$'

DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;7段数码管的段位值

STABLE DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H,0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H,1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

AD DB ; 保存ad转换结果

PASSWORD DB 41H,42H,43H,44H ;预设密码 要改!!!!

PW DB 4 DUP () ;密码预留

YU DB 20 DUP () ;预留20个空间存放数据

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

L0: MOV DX,OFFSET STR1 ;显示提示信息

MOV AH,9

INT 21H

MOV SI,OFFSET PW

MOV CX,4

SCAN: MOV AH,01H

INT 21H

CMP AL,'E'

JZ QUIT

MOV [SI],AL

INC SI

LOOP SCAN

CALL COMP;看不懂

CMP AL,4

JB ERRO;什么意思

JMP RIGHT

ERRO: MOV DX,OFFSET STR2 ;显示提示信息

MOV AH,9

INT 21H

JMP L0

RIGHT: MOV DX,OFFSET STR3 ;显示提示信息

MOV AH,9

INT 21H

CALL CLK ;ADC0809 CLK输入 ,启动8254

MOV DX,PCTL ;初始化8255工作方式

MOV AL,88H ;1000 1000方式0,A口,B口输出,C口高四位输入

OUT DX,AL ;

DISAD: CALL AD0809

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ DISAD

CMP AD,15H

JNB M1

CALL JIETI

JMP L0

M1: CMP AD,80H

JNB M2

CALL SIN

JMP L0

M2: CMP AD,0A0H

JNB M3

CALL TIXING

JMP L0

M3: CMP AD,0C0H

JNB M4

CALL FANG500

JMP L0

M4: CALL FANG1K

JMP L0

QUIT: MOV AX,4C00H ;结束程序退出

INT 21H

COMP PROC NEAR

MOV AL,0 ;初始化al,AL中保存相同字符的个数

MOV SI,OFFSET PW

MOV DI,OFFSET PASSWORD

MOV CX,4

COMPLOOP:

MOV AH,[DI]

CMP [SI],AH

JZ COMPS1

JMP COMPS2

COMPS1:INC AL

COMPS2:INC SI

INC DI

LOOP COMPLOOP

RET

COMP ENDP

DIS PROC NEAR ;显示键值子程序

PUSH AX ;以缓冲区存放的键值为键值表偏移找到键值并显示

MOV SI,3000H

MOV DL,0FDH

MOV AL,DL

AGAIN: PUSH DX

MOV DX,PA55

OUT DX,AL ;设置X1~X4,选通一个数码管

MOV AL,[SI] ;取出缓冲区中存放键值

MOV BX,OFFSET DTABLE

AND AX,00FFH

ADD BX,AX

MOV AL,[BX] ;将键值作为偏移和键值基地址相加得到相应的键值

MOV DX,PB55

OUT DX,AL ;写入数码管A~Dp

CALL DALLY

INC SI ;取下一个键值

POP DX

MOV AL,DL

TEST AL,01H ;判断是否显示完?

JZ OUT1 ;显示完,返回

ROR AL,1

MOV DL,AL

JMP AGAIN ;未显示完,跳回继续

OUT1: POP AX

RET

DIS ENDP

AD0809 PROC NEAR ;将IN0结果保存于bl中

MOV DX,ADC0809 ;启动0809的IN0

OUT DX,AL

AD1: MOV DX,PC55

IN AL,DX

CMP AL,80H

JB AD1

MOV DX,ADC0809

IN AL,DX

MOV AD,AL

MOV AH,AL

AND AL,0FH

MOV SI,3000H

MOV [SI],AL

MOV CL,4

SHR AH,CL

MOV [SI+1],AH

CALL DIS

RET

AD0809 ENDP

CLK PROC NEAR ;方波CLK时钟18432K子程序

;初始化8254计数器0工作在方式3,以十进制计数,初值为100

PUSH DX ;保护现场

PUSH AX ;保护现场

MOV DX,TCTL

MOV AL,17H ;0001 0111B

OUT DX,AL

MOV DX,TIMER0 ;装初值100

MOV AL,100D

OUT DX,AL

POP AX ;恢复现场

POP DX ;恢复现场

RET

CLK ENDP

FANG1K PROC NEAR ;方波1KHz子程序

;初始化8254计数器1工作在方式3,以十进制计数; 踔滴84

PUSH DX ;保护现场

PUSH AX ;保护现场

MOV DX,TCTL

MOV AL,56H ;0101 0110B

OUT DX,AL

MOV DX,TIMER1

MOV AL,184

OUT DX,AL

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

POP AX ;恢复现场

POP DX ;恢复现场

RET

FANG1K ENDP

FANG500 PROC NEAR ;方波500Hz子程序

;初始化8254计数器1工作在方式3,以十进制计数,初值为368

PUSH DX ;保护现场

PUSH AX ;保护现场

MOV DX,TCTL

MOV AL,76H ;0111 0110B

OUT DX,AL

MOV DX,TIMER1

MOV AL,70H ;368D分高低位写入

OUT DX,AL

MOV AL,01H

OUT DX,AL

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

POP AX ;恢复现场

POP DX ;恢复现场

RET

FANG500 ENDP

JIETI PROC NEAR ;阶梯波子程序

PUSH DX

PUSH AX

J0: MOV AL,00H

J1: MOV DX,DAC0832

OUT DX,AL

CALL JIETIDALLY

ADD AL,33H

CMP AL,0FFH

JNE J1

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ J0

POP AX

POP DX

RET

JIETI ENDP

SIN PROC NEAR ;正弦波子程序

PUSH AX

PUSH BX

PUSH DX

S1: MOV SI,OFFSET STABLE

MOV CX,64D

S2: MOV AL,[SI]

MOV DX,DAC0832

OUT DX,AL

INC SI

LOOP S2

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ S1

POP DX

POP BX

POP AX

RET

SIN ENDP

TIXING PROC NEAR ;梯形波子程序

T : MOV AL,7FH

MOV DX,DAC0832

OUT DX,AL

CALL TIXINGDALLY

T2:

MOV DX,DAC0832

OUT DX,AL

DEC AL

CMP AL,00H

JNZ T2

T3:

MOV DX,DAC0832

OUT DX,AL

INC AL

CMP AL,7FH

JNZ T3

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ T

RET

TIXING ENDP

;延时子程序

DALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,4000H

D1: MOV AX,0600H

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALLY ENDP

JIETIDALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

DD1: MOV AX,10H

DD2: DEC AX

JNZ DD2

LOOP DD1

POP AX

POP CX

RET

JIETIDALLY ENDP

TIXINGDALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

DDD1: MOV AX,0FFH

DDD2: DEC AX

JNZ DDD2

LOOP DDD1

POP AX

POP CX

RET

TIXINGDALLY ENDP

CODE ENDS

END START

通用数据传送类

数据转移类MOV

堆栈指令 PUSH POP

交换 XCHG

查表 XLAT

字位扩展 CBW CWD

I/O指令类

输入 IN

输出 OUT

地址传送类

取偏移地址 LEA LDS LES

标志传送

LAHF SAHF PUSHF POPF

算术指令

加法(不带进位和带进位) ADD ADC

+1指令 INC

减法 SUB SBB

-1指令 DEC

求补 NEG

比较 CMP

乘法(无符号,有符号) MUL IMUL

除法 DIV IDIV

BCD调整指令

DAA AAA DAS AAS AAM AAD

逻辑运算类

AND OR NOT XOR TEST

移位

SAL/SHL SHR SAR ROL ROR RCL RCR

串 *** 作

重复前缀 REP REPE REPZ REPNE REPNZ

MOVS/MOVSB/MOVSW

CMPS/CMPSB/CMPSW

SCAS/SCASB/SCASW

LODS/LODSB/LODSW

STOS/SYOSB/STOSW

程序控制类

各种JMP指令,大概有32个,各种形式的

循环控制 LOOP/LOOPZ/LOOPE/LOOPNZ/LOOPNE

调用 CALL RET

中断 INT INTO IRET

处理器控制类

暂停 HLT

空 *** 作 NOP

等待 WAIT

总线锁定 LOCK

处理器交权 ESC

大概就这些类别,注意同类指令不同表示的含义,具体内容太多了写出来不现实,还是自己看书。推荐冯博琴主编的《微机原理与接口技术》

另外记指令不难,记住字母表示的意思就很好记,比如:Z是ZF,C是CF,P是PF等等,N表示NOT的意思,E是ENABLE,B是BYTE字节,W是WORD字等等等等,记住助记符表示的英语意思就很好记。

IBM-PC汇编语言指令集

数据传送指令集

MOV

功能: 把源 *** 作数送给目的 *** 作数

语法: MOV 目的 *** 作数,源 *** 作数

格式: MOV r1,r2

MOV r,m

MOV m,r

MOV r,data

XCHG

功能: 交换两个 *** 作数的数据

语法: XCHG

格式: XCHG r1,r2 XCHG m,r XCHG r,m

PUSH,POP

功能: 把 *** 作数压入或取出堆栈

语法: PUSH *** 作数 POP *** 作数

格式: PUSH r PUSH M PUSH data POP r POP m

PUSHF,POPF,PUSHA,POPA

功能: 堆栈指令群

格式: PUSHF POPF PUSHA POPA

LEA,LDS,LES

功能: 取地址至寄存器

语法: LEA r,m LDS r,m LES r,m

XLAT(XLATB)

功能: 查表指令

语法: XLAT XLAT m

算数运算指令

ADD,ADC

功能: 加法指令

语法: ADD OP1,OP2 ADC OP1,OP2

格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data

影响标志: C,P,A,Z,S,O

SUB,SBB

功能:减法指令

语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data

影响标志: C,P,A,Z,S,O

INC,DEC

功能: 把OP的值加一或减一

语法: INC OP DEC OP

格式: INC r/m DEC r/m

影响标志: P,A,Z,S,O

NEG

功能: 将OP的符号反相(取二进制补码)

语法: NEG OP

格式: NEG r/m

影响标志: C,P,A,Z,S,O

MUL,IMUL

功能: 乘法指令

语法: MUL OP IMUL OP

格式: MUL r/m IMUL r/m

影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)

DIV,IDIV

功能:除法指令

语法: DIV OP IDIV OP

格式: DIV r/m IDIV r/m

CBW,CWD

功能: 有符号数扩展指令

语法: CBW CWD

AAA,AAS,AAM,AAD

功能: 非压BCD码运算调整指令

语法: AAA AAS AAM AAD

影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)

DAA,DAS

功能: 压缩BCD码调整指令

语法: DAA DAS

影响标志: C,P,A,Z,S

位运算指令集

AND,OR,XOR,NOT,TEST

功能: 执行BIT与BIT之间的逻辑运算

语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m

影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位

SHR,SHL,SAR,SAL

功能: 移位指令

语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

影响标志: C,P,Z,S,O

ROR,ROL,RCR,RCL

功能: 循环移位指令

语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL

影响标志: C,P,Z,S,O

程序流程控制指令集

CLC,STC,CMC

功能: 设定进位标志

语法: CLC STC CMC

标志位: C

CLD,STD

功能: 设定方向标志

语法: CLD STD

标志位: D

CLI,STI

功能: 设定中断标志

语法: CLI STI

标志位: I

CMP

功能: 比较OP1与OP2的值

语法: CMP r/m,r/m/data

标志位: C,P,A,Z,O

JMP

功能: 跳往指定地址执行

语法: JMP 地址

JXX

功能: 当特定条件成立则跳往指定地址执行

语法: JXX 地址

注:

A: ABOVE,当C=0,Z=0时成立

B: BELOW,当C=1时成立

C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立

E: EQUAL,当Z=1时成立

G: GREATER(大于),当Z=0且S=0时成立

L: LESS(小于),当S不为零时成立

N: NOT(相反条件),需和其它符号配合使用

O: OVERFLOW,O=1时成立

P: PARITY,P=1时成立

PE: PARITY EVEN,P=1时成立

PO: PARITY ODD,P=0时成立

S: SIGN,S=1时成立

Z: ZERO,Z=1时成立

LOOP

功能: 循环指令集

语法: LOOP 地址

LOOPE(Z)

地址 LOOPNE(Z) 地址

标志位: 无

CALL,RET

功能: 子程序调用,返回指令

语法: CALL 地址 RET RET n

标志位: 无

INT,IRET

功能: 中断调用及返回指令

语法: INT n IRET

标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值d回寄存器

字符串 *** 作指令集

MOVSB,MOVSW,MOVSD

功能: 字符串传送指令

语法: MOVSB MOVSW MOVSD

标志位: 无

CMPSB,CMPSW,CMPSD

功能: 字符串比较指令

语法: CMPSB CMPSW CMPSD

标志位: C,P,Z,S,O

SCASB,SCASW

功能: 字符串搜索指令

语法: SCASB SCASW

标志位: C,P,Z,S,O

LODSB,LODSW,STOSB,STOSW

功能: 字符串载入或存贮指令

语法: LODSB LODSW STOSB STOSW

标志位: 无

REP,REPE,REPNE

功能: 重复前缀指令集

语法: REP 指令S REPE 指令S REPNE 指令S

标志位: 依指令S而定

对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。

这里将简单介绍其指令类型及指令说明,如有要求给具体的指令格式及应用,请与amay联系,amay加以更新。

1)数据传送指令:负责把数据、地址或立即数传送到寄存器或存储单元中。

数据传送指令类型 指 令 说 明

通用数据传送指令 MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换)

累加器专用传送指令 IN(输入指令) 、OUT(输入指令)

地址传送指令 LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES)

标志寄存器传送指令 LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈)

2)算术指令:用来执行算术运算。

算术指令类型 指 令 说 明

加法指令 ADD(加法)、ADC(带进位加法)、INC(加1)

减法指令 SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较)

乘法指令 MUL(无符号数乘法)、IMUL(带符号数乘法)

除法指令 DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)

3)逻辑指令:对字或字节执行逻辑运算。

逻辑指令类型 指 令 说 明

逻辑运算指令 AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)

移动指令 SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位右移)

4)串处理指令:处理存放存储器里的数据串。

串处理指令类型 指 令 说 明

指 令 MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串)

5)控制转移指令:用来控制程序的执行流程。

控制转移指令类型 指 令 说 明

无条件转移指令 JMP(段间和段内转移)

条件转移指令 JZ(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移)

循环指令 LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令)

子程序指令 CALL(调用指令)、RET(返回指令)

中断指令 INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)

;;8255硬件连接及软件设置:

;;B口方式0输入,PB0~PB3分别连接K1~K4;

;;A口方式0输出,PA0~PA3外接驱动电路控制灯的4种动作;

;;驱动电路,可由74LS06、ULN2003作反相电流放大驱动继电器或固体继电器组成;

;;C口闲置;

;;按以上设置,8255方式控制字是82H ;

;;在PC机作主机的系统中,8255的4个寄存器地址是:

;;A口60H,B口61H,方式控制寄存器63H。

;;汇编程序如下:

SSEG SEGMENT PARA STACK ;堆栈段定义

DW 30H DUP()

SSEG ENDS

CSEG SEGMENT ;代码段定义

ASSUME CS:CSEG,DS:CSEG

ORG 200h ;主程序首址

START: MOV AL, 82H ;方式控制字

MOV DX, 63H

OUT DX, AL ;方式控制字送入方式控制寄存器

Scan: IN AL,61H ;扫描从B口读入的K1~K4状态

CALL PRC1 ;开灯、关灯

CALL PRC2 ;是否暂停

CALL PRC3 ;是否换向

CALL PRC3 ;是否移动

JMP Scan ;主程序循环

PRC1 PROC NEAR ;"开/关灯" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000001B ;检测PB0输入状态

JZ CloseL ;若PB0低电平,表示K1断,转CloseL处执行

OpenL: OUT 60H,AL ;若PB0高电平,表示K1通,PA0输出高电平,开灯

JMP RT1 ;转RT1处指令返回

CloseL: MOV AL,00000000B ;PA0输出低电平

OUT 60H,AL ;关灯

RT1: POP AX ;B口状态出栈

RET ;返回主程序

PRC1 ENDP ;子程序定义完毕

PRC2 PROC NEAR ;"暂停" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000010B ;检测PB1输入状态

JZ RT2 ;若PB1低电平,表示K2断,不暂停

PAUS: OUT 60H,AL ;若PB1高电平,表示K2通,PA1输出高电平,暂停

RT2: POP AX ;B口状态出栈

RET ;返回主程序

PRC2 ENDP ;子程序定义完毕

PRC3 PROC NEAR ;"换向" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000100B ;检测PB2输入状态

JZ RT3 ;若PB2低电平,表示K3断,不换向

CHG: MOV AL,00000101B ;若PB2高电平,表示K3通

OUT 60H,AL ;PA2、PA0输出高电平、换向,灯保持亮

RT3: POP AX ;B口状态出栈

RET ;返回主程序

PRC3 ENDP ;子程序定义完毕

PRC4 PROC NEAR ;"移动" *** 作 子程序定义

TEST AL,00001000B ;检测PB3输入状态

JZ RT4 ;若PB3低电平,表示K4断,不移动

MOVE: MOV AL,00001001B ;若PB3高电平,表示K4通

OUT 60H,AL ;PA3、PA0输出高电平、移动,灯保持亮

RT4: RET ;返回主程序

PRC4 ENDP ;子程序定义完毕

CSEG ENDS ;代码段定义完毕

END START ;主程序结束

以上就是关于微机原理中 读端口的指令全部的内容,包括:微机原理中 读端口的指令、汇编问题、TestAndSet()解决硬体同步的原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9860502.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存