
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()解决硬体同步的原理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)