微机原理五类常用程序

合集下载

微机原理实验系统调试命令与编程应用

微机原理实验系统调试命令与编程应用

微机原理实验系统调试命令与编程应用
微机原理实验系统通常是一个模拟的计算机系统,用于学习和实践微机原理相关的知识和技能。

在调试微机原理实验系统时,你可以使用一些命令和编程应用来执行各种操作。

以下是一些常见的命令和编程应用的示例:
1. 汇编语言编程:使用汇编语言编写程序,并通过汇编器将其转换为机器码。

可以使用指令集手册来了解特定处理器的指令集,并使用汇编语言进行编程。

2. 调试器:调试器是一个用于程序调试的工具,可以逐步执行程序,并检查程序状态、寄存器值和内存内容。

你可以使用调试器来跟踪程序的执行流程,定位问题和错误。

3. 单步执行:单步执行是指一次执行一条机器指令,并观察执行结果。

可以使用单步执行来逐步调试程序,以查看每个指令的影响和结果。

4. 断点设置:通过设置断点,你可以在程序执行到指定位置时暂停执行。

这允许你检查程序在该位置的状态,并进行必要的调试操作。

5. 寄存器操作:在微机原理实验系统中,你可以使用一些命令来读取和修改CPU寄存器的值。

这对于观察和调试程序时的寄存器状态非常有用。

6. 内存操作:可以使用命令来读取和写入内存中的数据。

你可以使用这些命令来观察和修改程序的数据区域,以及进行其他与内存相关的操作。

7. 输入/输出模拟:微机原理实验系统通常提供了输入和输出设备的模拟。

你可以使用相关的命令和编程应用来模拟输入设备(如键盘)的输入和输出设备(如显示器)的输出。

请注意,具体的命令和编程应用取决于你使用的微机原理实验系统的软件和硬件平台。

建议参考相关的文档和教材,以了解特定系统的详细调试命令和编程应用。

微机原理 第5章5.2.4串操作类指令

微机原理 第5章5.2.4串操作类指令

第5章
2、REPZ重复前缀指令
REPZ
;每执行一次串指令,CX减1 每执行一次串指令,CX减 并判断ZF是否为0 ZF是否为 ;并判断ZF是否为0, 只要CX CX= ZF= 重复执行结束 ;只要CX=0或ZF=0,重复执行结束
【例5.42】比较S1、S2两个数据串是否相同,不同则 】 比较 、 两个数据串是否相同, 两个数据串是否相同 例5.42:比较字符串 : 跳到NOMATCH执行。 执行。 跳到 执行 S1 DB 0,1,1,0,0 S2 DB 0,1,1,1,0 …… CLD LEA SI,S1 ;源串偏移地址赋值给 源串偏移地址赋值给SI 源串偏移地址赋值给 LEA DI,ES:S2 ;目的串偏移地址赋值给 目的串偏移地址赋值给SI 目的串偏移地址赋值给 MOV CX,5 ;源串和目的串的数据个数 源串和目的串的数据个数 AGAIN: CMPSB ;源串与目的串相减,标志位 源串与目的串相减, 源串与目的串相减 JNE NOMATCH ;有任一不同,跳到NOMATCH 有任一不同,跳到 有任一不同 DEC CX ;数据串没比较完,继续比较 数据串没比较完, JNZ AGAIN 数据串没比较完 NOMATCH:
第5章
四、串比较CMPS
将主存中的源操作数减去目的操作数, 将主存中的源操作数减去目的操作数,以便设 置标志(影响AF,ZF,PF,SF,OF,CF) , 进而比 置标志 ( 影响 ) 较两操作数之间的关系 CMPSB ;字节串比较:DS:[SI]-ES:[DI] 字节串比较:DS:[SI]- SI←SI± DI←DI± ;SI←SI±1,DI←DI±1 CMPSW ;字串比较:DS:[SI]-ES:[DI] 字串比较:DS:[SI]- SI←SI± DI←DI± ;SI←SI±2,DI←DI±2

微机原理-常用指令用法

微机原理-常用指令用法

微机原理-常⽤指令⽤法序号指令功能和特点例程1 例程2 例程3 1 MOV 参与传送的操作数有:通⽤寄存器,段寄存器,存储单元,⽴即数四类。

有有互相之间只要不违背以下原则即可进⾏传送:1.源,⽬的操作数长度⼀致2.源,⽬的操作数不能同为存储单元3.CS不能作为⽬的操作数4.段寄存器只能通过通⽤寄存器或存储单元进⾏赋值。

5.⽴即数不能作为⽬的操作数。

2 PUSH ⼀定是字操作(不能PUSH字节)有PUSH AX,PUSH DS,PUSH [0000H] ;【POP对等】SP <‐ SP‐2,字存⼊SP指向的地址(⾼位在⾼地址)操作数可以为通⽤寄存器,段寄存器或存储单元,CS可PUSH不可POP3 POP 与PUSH对等4 XCHG Xchg dst,src可在通⽤寄存器间,通⽤寄存器和存储单元间进⾏。

不能⽤段寄存器和⽴即数。

XCHG [1200H],DXXCHG AL,CL5 XLAT 直接写出XLAT就⾏,在调⽤该指令前,需将BX初始化为数据表的⾸地址,AL初始化为希望取得的数据在数据表中的序号。

在调⽤该指令后,AL中的内容被赋值为DS:[BX][AL]的内容。

6 LEA LEA BX,1000H[SI],执⾏后BX = SI+1000H有LEA BX,TABLEMOV BX,OFFSET TABLE,以上两条等价7 LDS 指针送寄存器和DS指令LDS dst,src将SRC指定的连续4个存储单元的内容传送到DS和DST指向的寄存器,⾼字送到DS,低字送到DST假设DS=3200H,(33550H)=3A78H,(33552H)=1998HLDS SI,[1550H]后,SI = 3A78H,DS = 1998H8 LES 类同LDS,不同的是DS改成了ES9 SAHF 将AH的内容送标志寄存器的低8位10 LAHF 把标志寄存器的低8位送⼊AH11 PUSHF 将16位标志寄存器内容压⼊堆栈12 POPF 从堆栈弹出字数据送⼈标志寄存器13 ADD Dst可以为存储单元或通⽤寄存器有 Src可为存储单元,通⽤寄存器或⽴即数,不能同时为存储单元Add ax,1234hAdd [1234h],ax14 ADC Adc dst,srcDst = dst+src+cf15 INC Inc dstDst为通⽤寄存器或存储单元影响OF,SF,ZF,AF,PF,但不影响CF。

微机原理五类常用程序

微机原理五类常用程序

五类常用程序:传输数据求最大最小值统计正负数排序加法程序存储器清零或置FF1.1将1000H-1063H中的各字节内容清0(或置FFH)1.2传输数据块将1000H-1063H中的字节内容传递到4000H-4063H2.找最大值最小值从2500H-2563H中存放着数据,把其中的最大值找出来,地址存放在3000H中3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。

负数个数存入2200H4.1求1AH+02H+31H+14H+2FH+06H=???数据1AH、0FH 、24H、4EH、18H、2DH放在[3000H]- [3005H]处4.2求十进制计算25 74 89 67+ 49 78 64 95数据25 74 89 67放在[2400]- [2403]数据49 78 64 95放在[2500]- [2503]4.3将BLOCK单元开始的10个单元数相加,结果存放入BLOCK单元。

若相加过程中发生溢出,停止运算,并在DL中设置溢出标志FF.5.冒泡排序方法5.1字节型变量V AR1、V AR2和V AR3存放有3个无符号数,将其中的内容按从大到小重新排列。

解:经重新排列后,V AR1的值最大,V AR3的值最小。

由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。

编程思路:通过在三个数中找出最大值,将它与V AR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在V AR2中。

汇编语言程序如下:5.2存放在2040H-2045H中的字节数据由大到小排列1.1将1000H-1063H中的各字节内容清0(或置FFH)MOV SI, 1000HMOV CX, 0064HXOR AL,ALL1: MOV [SI], ALINC SIDEC CXJNZ L1HLT1.2传输数据块将1000H-1063H中的字节数据内容传递到4000H-4063HMOV SI, 1000HMOV DI, 4000HMOV CX, 0064HL1: MOV AL, [SI]MOV [DI], ALINC SIINC DIDEC CXJNZ L1HLT2. 从2100H 开始存放100个无符号数,求最大值并存入单元2200HMOV SI, 2100HMOV CX, 0064HXOR AL,ALL1: CMP AL, [SI]JNC L2MOV AL , [SI]L2: INC SIDEC CXJNZ L1MOV [2200], ALHLT如果求最小值XOR AL,AL 改为MOV AL,0FFHJNC L2 改为JC L2或者MOV [SI], ALINC SI相应MOV CX, 0063H3.统计负数正数从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。

微机原理指令表和解释

微机原理指令表和解释
取串指令
LODSB;(字节传送)AL DS:[SI] SI [SI+-1]
LODSW;(字传送)AL DS:[SI] SI [SI+-2]
存串指令
STOSB;(字节传送)ES:[DI] AL DI [DI+-1]
STOSW;(字传送)ES:[DI] AX DI [DI+-2]
串比较指令
CMPSB;(字节传送)DS:[SI]- ES:[DI] SI [SI+-1] DI [DI+-1]
空操作指令nop做空操作用于延时暂停指令hlt程序暂停执行等待指令waitcpu引脚为高电平时执行封锁指令lock总线封锁cpu独占总线指令交权指令esc
1.传送类指令
MOV DEST,SRC;DEST(除CS)SRC
2.交换指令
XCHG DEST,SRC;DEST(寄存器)SRC
3.堆栈操作指令
PUCH SRC;SP SP-2将16位源操作数压入堆栈
AAA;加法运算十进制调整
AAS;减法运算十进制调整
10.逻辑指令
AND DEST,SRC;DEST DEST&&SRC
OR DEST,SRC;DEST DEST||SRC
NOT DEST;NOT!NOT
XOR DEST,SRC;DESTDEST异或SRC
测试指令
TEST DEST,SRC;将DEST&&SRC结果不送回DEST
REPNZ;每执行依次串指令CX(CX)-1 CX=0或ZF=1重复执行结束
14.无条件转移类指令
JMP DEST;无条件转移到DEST所指定的地址
15.循环指令
LOOP DEST;CXCX)-1直至CX=0结束循环

微机原理指令

微机原理指令

微机原理指令微机原理指令是计算机中非常重要的概念,它是计算机能够理解和执行的基本操作指令。

微机原理指令包括了数据传输指令、算术运算指令、逻辑运算指令、转移指令等等,它们构成了计算机程序的基础,是计算机进行各种运算和操作的基础。

在学习和理解微机原理指令时,我们需要对各种指令的功能、格式、操作方法等有着清晰的认识,下面将对微机原理指令进行详细的介绍。

首先,数据传输指令是微机原理指令中的一类重要指令,它包括了将数据从一个位置传送到另一个位置的操作。

数据传输指令可以分为直接数据传送指令和间接数据传送指令。

直接数据传送指令是将数据直接从一个寄存器传送到另一个寄存器,而间接数据传送指令则是通过地址传送数据。

这些指令对于计算机的数据处理操作起着至关重要的作用,能够实现对数据的高效管理和处理。

其次,算术运算指令也是微机原理指令中的重要内容。

在计算机中,进行各种数值计算是非常常见的操作,而算术运算指令则是实现这些计算的基础。

算术运算指令包括了加法指令、减法指令、乘法指令、除法指令等等,它们能够对数据进行各种数值运算,为计算机的数据处理提供了强大的支持。

另外,逻辑运算指令也是微机原理指令中的重要内容。

逻辑运算指令包括了与运算指令、或运算指令、非运算指令、异或运算指令等等,它们能够对数据进行各种逻辑运算,实现对数据的逻辑处理和控制。

逻辑运算指令在计算机的逻辑控制和条件判断中起着至关重要的作用,能够实现对计算机程序流程的灵活控制。

最后,转移指令也是微机原理指令中的重要内容。

转移指令能够实现对程序执行流程的控制,包括了无条件转移指令和有条件转移指令。

无条件转移指令能够直接改变程序的执行顺序,而有条件转移指令则是在满足一定条件下才能改变程序的执行顺序。

转移指令在计算机程序的控制和跳转中起着非常重要的作用,能够实现对程序执行流程的灵活控制和跳转。

综上所述,微机原理指令是计算机中非常重要的概念,它包括了数据传输指令、算术运算指令、逻辑运算指令、转移指令等等,它们构成了计算机程序的基础,是计算机进行各种运算和操作的基础。

微机原理程序

微机原理程序

实验二:循环程序设计2.DA TA SEGMENTx db -78,127,-128,-125,88y db 32,-43,76,95,1S db 5 dup(?)data endsCode segmentAssume cs:code,ds:data Start:mov ax,dataMov ds,axMov cx,5Mov bx,0L1:mov al,x[bx]Add al,y[bx]Inc bxLoop L1MOV AH,4CHINT 21HCODE ENDSEND START3.DA TA SEGMENTY DB 68H,24H,90H,57H,13H HX DB 67H,34H,12H,90H,57H S DB 5 DUP(?)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV CX,5MOV SI,OFFSET XMOV DI,OFFSET YLP:MOV AL,[SI]MOV AH,[DI]ADC AL,AHDAAMOV S[SI],ALINC SIINC DILOOP LPMOV AH,4CHINT 21HEND START4.DA TA SEGMENTLIST DB 0,1,2,3,4,5,6,7,8,9COUNT EQU $-LISTDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV CX,COUNT-1LOOP1:MOV DX,CXMOV BX,0LOOP2:MOV AX,LIST[BX]CMP AX,LIST[BX+1]MOV LIST[BX],AXLOOP3:INC BXLOOP LOOP2MOV CX,DXLOOP LOOP1MOV AX,4CHINT 21HCODE ENDSEND START实验三:子程序调用程序设计DA TA SEGMENTNUM DB 85,77,126,-1,-43,37,-128,11,-19,13 DA TA ENDSADDITION SEGMENTNUM1 DB 10 DUP(?)ADDITION ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,ES:ADDITION START:AX,DATAMOV DS,AXMOV AX,ADDITIONMOV ES,AXCALL ORDERCALL COPYMOV AH,4CHINT 21HORDER PROCMOV CX,9MOV DX,CXLP1:MOV AL,NUM[BX]CMP AL,NUM[BX+1]JLE NEXTXCHG AL,NUM[BX+1]MOV NUM[BX],ALNEXT:ADD BX,1DEC DXJNZ LP1LOOP LP2RETORDER ENDPCOPY PROCMOV CX,10MOV BX,0LP:MOV AL,NUM[BX]MOV ES:NUM1[BX],ALINC BXLOOP LPRETCOPY ENDPCODE ENDSEND START实验四:DOS功能系统调用1.DA TA SEGMENTDUF DB 10 DUP(?)DA TA ENDSSTACK SEGMENTSA DB 100 DUP(?)TOP LABEL WORDSTACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK START:MOV AX,STACKMOV SS,AXMOV SP,OFFSET TOPPUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV CX,05HS1:MOV AH,1INT 21HPUSH AXLOOP S1MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HMOV CX,05HMOV BX,4S2:POP AXMOV DUF[BX],ALDEC BXLOOP S2MOV BX,0MOV CX,05HS3:MOV DL,DUF[BX]INC BXMOV AH,2INT 21HLOOP3INC ALMOV AH,4CHINT 21HCODE ENDSEND START2.DA TA SEGMENTBUFF DB 50DB ‘?’LETTER DB 50 DUP(‘?’)DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXLEA DX,BUFFMOV AH,0AHINT 21HMOV DL,0DHMOV AH,02HMOV DL,OAHMOV AH,02HINT 21HLEA DX,LETTERMOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START第五次实验:接口预备知识DA TA SEGMENTOUTBUF DB’5’,’4’,’3’,’2’,’1’COUNT EQU $-COUNTDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA START:MOV AX,DATAMOV DS,AXMOV SI,OFFSET OUTBUF MOV DI,COUNTNEXT:MOV DL,[SI]MOV AH,02HINT 21HCALL DELAYINC SIDEC DIJNZ NEXTMOV AH,4CHINT 21HDELAY PROC NEARPUSH CXMOV BX,299HFOR1:MOV CX,0FFFFHFOR2:LOOP FOR2DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START第六次实验:简单的输出接口1.CODE SEGMENT ASSUME CS:CODE start:mov di ,2l1:mov al ,02hmov dx,280hout dx,alcall delaymov al ,00hmov dx,280hout dx,alcall delaymov si,3l2:mov al,04hmov dx,280hout dx,alcall delaymov al,00hmov dx,280hout dx,alcall delaydec sijnz l2mov al,08hmov dx,280hout dx,alcall delaymov al ,00hmov dx,280hout dx,alcall delaydec dijnz l1MOV AH,4CHINT 21HDELAY PROC NEAR PUSH CXMOV BX,100HFOR1:MOV CX,0FFFFH FOR2:LOOP FOR2 DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START2.CODE SEGMENT ASSUME CS:CODE START:MOV CX,2AA:MOV BX,8PUSH CXMOV DX,280HMOV AL,01HBB:OUT DX,ALCALL DELAYMOV DX,280HROl AL,1OUT DX,ALDEC BXJNZ BBPOP CXMOV DX,280Hmov AL,00hOUT DX,ALLOOP AAMOV AH,4CHINT 21HDELAY PROC NEAR PUSH BXPUSH CXMOV BX,299HFOR:MOV CX,0FFFFH FOR1:LOOP FOR1DEC BXJNZ FORPOP CXPOP BXRETDELAY ENDPCODE ENDSEND START第七次实验:简单的输入接口1.data segmentx db'end$'data endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov cx,6mov dl,31hlp: push dxmov dx,280hin al,dxand al,10hmov bl,allp1: in al,dxand al,10hcmp bl,aljz lp1mov dl,0ahmov ah,02hint 21hmov dl,0dhint 21hpop dxint 21hinc dxloop lpmov dl,0ahint 21hmov dl,0dhint 21hmov dx,offset xmov ah,09hint 21hmov ah,4chint 21hcode endsend start2.data segmentx db'end$'data endscode segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov cx,6mov dl,31hlp: push dxmov dx,280hin al,dxpush cxmov cx,2lp1: and al,10hmov bl,allp2: in al,dxand al,10hcmp bl,aljz lp2loop lp1pop cxmov dl,0ahmov ah,02hint 21hmov dl,0dhint 21hpop dxint 21hinc dxloop lpmov dl,0ahint 21hmov dl,0dhint 21hmov dx,offset xmov ah,09hint 21hmov ah,4chint 21hcode endsend start第八次实验:数码管动态显示实验1.CODE SEGMENTASSUME CS:CODE START:MOV CX,03FFHL1: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,76H ;HOUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,73H;POUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L1MOV DX,280HMOV AL,00HOUT DX,ALMOV AH,4CHINT 21HDONG PROC NEARPUSH CXPUSH BXMOV BX,0100H FOR1: MOV CX,0100H FOR2: LOOP FOR2DEC BXJNZ FOR1POP BXPOP CXRETDONG ENDPCODE ENDSEND START2.CODE SEGMENTASSUME CS:CODE START:MOV CX,01FFHL1: MOV DX,280HMOV AL,00HOUT DX,ALMOV AL,3FH ;0OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,06H;1OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L1MOV CX,01FFHL2: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,5BH ;2OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,4FH;3OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L2MOV CX,010FHL3: MOV DX,280HMOV AL,00HOUT DX,ALMOV AL,66H ;4OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,6DH;5OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L3MOV CX,010FHL4: MOV DX,280HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,7DH ;6OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,07H;7OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L4MOV CX,010FHL5: MOV DX,280HMOV AL,00HMOV DX,290HMOV AL,7FH ;8OUT DX,ALMOV DX,282HMOV AL,02HOUT DX,ALCALL DONGMOV DX,282HMOV AL,00HOUT DX,ALMOV DX,290HMOV AL,6FH;9OUT DX,ALMOV DX,280HMOV AL,01HOUT DX,ALCALL DONGLOOP L5MOV DX,280HMOV AL,00HOUT DX,ALMOV AH,4CHINT 21HDONG PROC NEARPUSH CXPUSH BXMOV BX,0100HFOR1: MOV CX,0100HFOR2: LOOP FOR2DEC BXJNZ FOR1POP BXPOP CXRETDONG ENDPCODE ENDSEND START第九次实验:可编程并行接口8255实验1.code segmentassume cs:codestart:mov dx,283hmov al,90hout dx,almov dx,280hin al,dxand al,01hcmp al,01Hmov cx,3mov dx,281hjnz l2l1:mov al,01hout dx,alcall delaymov al,02hout dx,alcall delaymov al,04hout dx,alcall delaymov al,08hout dx,alcall delayloop l1mov al,00hout dx,aljmp l3l2:mov al,0f0hout dx,alcall delaymov al,000hout dx,alcall delayloop l2mov al,00hout dx,all3:mov ah,4chint 21hdelay proc nearPUSH CXPUSH BXMOV BX,0200H FOR3:MOV CX,0FFFFH FOR4:LOOP FOR4DEC BXJNZ FOR3POP BXPOP CXRETdelay endpcoed endsend start2.CODE SEGMENTASSUME CS:CODESTART:MOV AL,10110100BMOV DX,283HOUT DX,ALL1: MOV DX,282H ;C口端口号,检验C口的pc4是否为高电平,高电平则输入IN AL,DXAND AL,20HJZ L1MOV DX,280H ; A口端口号,读入数据IN AL,DXCALL DELAYMOV DX,281H ; B口端口号,输出至A口OUT DX,ALL2: MOV DX,282HIN AL,DXAND AL,02H ; 判断输出缓冲器是否满,满就等待,不满程序结束JZ L2JMP L3LOOP STARTL3:MOV AL,00MOV DX,280HOUT DX,ALMOV AH,4CHINT 21HDELAY PROC NEARPUSH CXMOV BX,0f00HFOR1:MOV CX,0FFFFHFOR2:LOOP FOR2DEC BXJNZ FOR1POP CXRETDELAY ENDPCODE ENDSEND START实验十:可编程计数器/定时器8253实验1.CODE SEGMENTASSUME CS:CODESTART:mov dx,283hmov al,10hout dx,almov dx,280hmov al,04hout dx,alcall delaymov dx,280hin al,dxmov dl,aladd dl,30hmov ah,2int 21h;jmp startmov ah,4chint 21hdelay proc nearpush cxmov bx,1000hfor1:mov cx,0ffffhfor2:loop for2dec bxjnz for1pop cxretdelay endsend startcode ends2.CODE SEGMENTASSUME CS:CODESTART:mov al,52hout dx,almov dx,281hmov al,05hout dx,almov ah,4chint 21hend startcode ends实验十一:DATA SEGMENTABC DB'ARE YOU READY?',0DH,0AH,'$'CCC DB'IRQ10 INTERRUPT NOW !',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART:MOVAX,CSMOVDS,AXMOVDX,OFFSET ZD10MOVAX,2572HINT 21HCLIIN AL,21HAND AL,0FBHOUT 21H,ALIN AL,0A1HAND AL,0FBHOUT 0A1H,ALSTIMOVCX,20LOOP1: PUSHCXMOVAX,DATAMOVDS,AXLEA DX,ABCMOVAH,9INT 21HCALL DELAYPOP CXLOOP LOOP1MOVDX,21HIN AL,DXOR AL,4MOVDX,0A1HIN AL,DXOR AL,4OUT 0A1H,ALMOVAH,4CHINT 21HZD10 PROC NEAR PUSHAXPUSHBXPUSHCXPUSHDXMOVCX,5AGAIN:PUSHCXLEA DX,CCCMOVAH,9INT 21HCALL DELAYPOP CXLOOP AGAINPOP DXPOP CXPOP BXPOP AXMOVAL,20HOUT 20H,ALMOVAL,20HOUT 0A0H,ALIRETZD10 ENDPDELAY PROC NEAR MOVBX,02FFHFOR1: MOVCX,0FFFFH FOR2: LOOP FOR2DEC BXJNZ FOR1RETDELAY ENDPCODE ENDSEND START2、DATA SEGMENTABC DB'ARE YOU READY?',0DH,0AH,'$' DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOVAX,CSMOVDS,AXMOVDX,OFFSET ZD10MOVAX,2572HINT 21HCLIIN AL,21HAND AL,0FBHOUT 21H,ALIN AL,0A1HAND AL,0FBHOUT 0A1H,ALSTIMOVCX,20LOOP1: PUSHCXMOVAX,DATAMOVDS,AXLEA DX,ABCMOVAH,9INT 21HCALL DELAYPOP CXLOOP LOOP1MOVDX,21HIN AL,DXOR AL,4OUT 21H,ALMOVDX,0A1HIN AL,DXOR AL,4OUT 0A1H,ALMOVAH,4CHINT 21HZD10 PROC NEARPUSHAXPUSHBXPUSHCXPUSHDXMOVCX,3AGAIN: PUSHCXMOVDX,280HMOVAL,0FHOUT DX,ALCALL DELAYMOVDX,280HMOVAL,00HOUT DX,ALCALL DELAYPOP CXLOOP AGAINPOP DXPOP CXPOP BXPOP AXMOVAL,20HOUT 20H,ALMOVAL,20HOUT 0A0H,ALIRETZD10 ENDPDELAY PROC NEAR MOVBX,02FFHFOR1: MOVCX,0FFFFH FOR2: LOOP FOR2DEC BXJNZ FOR1RETDELAY ENDPCODE ENDSEND START。

微机原理第五章 程序设计-dsh

微机原理第五章 程序设计-dsh

INT
COSEG
21H
ENDS END START
第三节 分支程序
计算机可根据不同条件进行逻辑判断,从而选择不同 的程序流向。程序的流向是由 CS和 IP决定的,当程序 的转移仅在同一段内进行时,只需修改偏移地址 IP的 值;如果程序的转移是在不同的段之间进行,则段基 址 CS和偏移地址 IP均需要修改。 转移指令分为无条件转移指令和条件转移指令。 在进行分支程序设计时,首先要根据处理的问题用比 较、测试的方式,或者用算术运算、逻辑运算使标志 寄存器产生相应的标志位,根据转移条件选择转移指 令。
INC INC DEC JNZ
BX BX CX LOP ; ;控制部分
修改部分
MOV YY,AX MOV AH,4CH INT CODE ENDS 21H
END
START
一.循环的基本结构
1.先执行,后判断结构
流程图如右:
入口
初始化部分
循环体
修改部分
N
循环 结束? Y 出口
例2. 编程统计数据块中正数的个数,
Y
RS END (DX)
DATA
SEGMENT
D1
COUNT RS DATA CODE
DB,-1,-3,5,7,-9,·,-6 · ·
EQU DW ENDS SEGMENT ASSUME CS:CODE,DS:DATA $-D1 ?
START:
MOV
AX,DATA
MOV
MOV MOV MOV
DS,AX
JMP JUS2
BIGD: JG JUS1 ;x>0转移 ;x=0
MOV AL, 0
JMP
JUS1: JUS2:
JUS2

微机原理

微机原理

谢谢观看
基础知识
基进制和八进制)及其转换 2.二进制编码 3.二进制逻辑运算 4.二进制算术运算 5.BCD码 6.计算机中字符表示 7.计算机的组成结构 8.补码、反码、原码之间的转换方法。
8086指令
8086指令
1.基本数据类型 2.寻址方式 3.6个通用指令
微机原理
一门计算机专业的必修课程
01 基础知识
03 汇编语言 05 存储结构
目录
02 8086指令 04 操作时序 06 输入输出
07 中断
09 接口电路 011 实验工具
目录
08 芯片8255 010 数模模数
基本信息
又名:微型计算机原理。
是一门计算机专业的必修课程。
《微机原理》是一门专业基础课程,它的主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇 编语言设计以及微型计算机各个组成部分介绍等内容。要求考生对微机原理中的基本概念有较深入的了解,能够 系统地掌握微型计算机的结构、8086微处理器和指令系统、汇编语言程序设计方法、微机系统的接口电路设计及 编程方法等,并具有综合运用所学知识分析问题和解决问题的能力。
输入输出
输入输出
1.输入输出的寻址方式 2.CPU与外设数据传送方式 3.DMA控制器主要功能 4.DMA控制器8237
中断
中断
1.中断的基本概念 2.8086的中断方式 3.PC/XT的中断结构 4.Intel 8259A
芯片8255
芯片8255
1.微机系统并行通信的概念 2.并行芯片8255的结构 3.并行芯片8255的方式 4.PC/XT中8255的使用
汇编语言
汇编语言
1.汇编语言的格式 2.语句行的构成 3.指示性语句 4.指令性语句 5.汇编语言程序设计的过程 6.程序设计 7.宏汇编与条件汇编

微机——微机原理指令汇总情况

微机——微机原理指令汇总情况

微机——微机原理指令汇总情况微机原理指令是计算机中执行的最基本的操作。

它们是一条条的机器代码,用于告诉计算机要执行的操作。

微型计算机通过使用特定的指令集,可以执行各种不同的任务。

本文将对微机原理指令进行汇总和分类,以便更好地了解微机原理。

1. 数据传输指令(Data Transfer Instructions):用于将数据从一个位置传送到另一个位置。

- MOV(Move):将一个寄存器或内存的内容复制到另一个位置。

- XCHG(Exchange):交换两个操作数的值。

- PUSH(Push):将数据压入栈中。

- POP(Pop):从栈中弹出数据。

2. 运算指令(Arithmetic Instructions):用于执行一些基本的算术和逻辑运算。

- ADD(Addition):将两个操作数相加。

- SUB(Subtraction):将第一个操作数减去第二个操作数。

- MUL(Multiplication):将两个操作数相乘。

- DIV(Division):将第一个操作数除以第二个操作数。

- INC(Increment):将操作数加一- DEC(Decrement):将操作数减一3. 逻辑指令(Logical Instructions):用于执行一些逻辑运算。

- AND(And):对两个操作数进行逻辑与操作。

-OR(Or):对两个操作数进行逻辑或操作。

- XOR(Exclusive Or):对两个操作数进行异或操作。

- NOT(Not):对操作数进行逻辑非操作。

- SHR(Shift Right):对操作数进行右移操作。

- SHL(Shift Left):对操作数进行左移操作。

4. 跳转指令(Jump Instructions):用于控制程序的跳转。

- JMP(Jump):无条件跳转到指定的地址。

- JZ(Jump if Zero):如果上一个比较指令结果为零,则跳转到指定地址。

- JNZ(Jump if Not Zero):如果上一个比较指令结果不为零,则跳转到指定地址。

微机原理指令大全

微机原理指令大全

微机原理指令大全微机原理是计算机科学中的重要基础知识,而指令则是微机原理中的核心内容之一。

指令是计算机中的基本操作命令,它直接影响着计算机的运行和执行效率。

本文将为大家详细介绍微机原理中常见的指令,并提供一份完整的指令大全,希望能够帮助大家更好地理解和掌握微机原理中的指令知识。

一、数据传送指令。

数据传送指令是微机原理中最基本的指令之一,它用于将数据从一个地方传送到另一个地方。

常见的数据传送指令包括MOV、LDM、STM等。

这些指令可以实现寄存器之间、寄存器和内存之间、内存和输入输出设备之间的数据传送操作,是计算机程序中不可或缺的一部分。

二、算术运算指令。

算术运算指令用于进行各种数值计算操作,包括加法、减法、乘法、除法等。

常见的算术运算指令有ADD、SUB、MUL、DIV等。

这些指令可以对寄存器和内存中的数据进行各种算术运算,是计算机程序中常用的指令之一。

三、逻辑运算指令。

逻辑运算指令用于进行各种逻辑操作,包括与、或、非、异或等。

常见的逻辑运算指令有AND、OR、NOT、XOR等。

这些指令可以对寄存器和内存中的数据进行逻辑运算,是计算机程序中实现逻辑判断和控制流程的重要指令之一。

四、转移指令。

转移指令用于改变程序的执行顺序,包括无条件转移和条件转移两种。

常见的转移指令有JMP、JZ、JNZ、JC、JNC等。

这些指令可以实现程序的跳转和循环控制,是计算机程序中实现各种复杂逻辑的重要指令之一。

五、比较指令。

比较指令用于比较两个数据的大小关系,常见的比较指令有CMP、TEST等。

这些指令可以对寄存器和内存中的数据进行比较操作,并根据比较结果设置标志位,是实现条件转移和逻辑判断的重要指令之一。

六、输入输出指令。

输入输出指令用于实现计算机与外部设备的数据交换,包括输入数据和输出数据两种操作。

常见的输入输出指令有IN、OUT等。

这些指令可以实现计算机与外部设备之间的数据传输,是计算机程序中实现输入输出功能的重要指令之一。

微机原理课设参考资料之一:软件流程与软件程序的例子

微机原理课设参考资料之一:软件流程与软件程序的例子

微机原理与接口技术——程序与流程编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。

用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:<原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。

(2)按数字键“2”,完成在字符串中找最大值。

用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:<原字符串> The maximum is <最大值>.按任一键重做;按Esc键返回主菜单。

(3)按数字键“3”,完成输入数据组的排序。

用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:<原数值串><新数值串>按任一键重做;按Esc键返回主菜单。

(4)按数字键“4”,完成时间的显示。

首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。

按任一键重新对时;按Esc键返回主菜单。

(5)按数字键“5”,结束程序的运行,返回操作系统。

解答过程:※主程序的编程思路:此程序共5个功能,可采用跳转表法来实现多路分支结构程序设计。

现将这5个程序段,各程序段的首地址分别标号为G1,G2,G3,G4,G5。

将5个程序段的入口地址做成表TABLE放入数据段,程序根据给定的参数计算出欲转入的程序段的首地址在TABLE中的位置后,取出该地址,跳转至该程序段。

首先,通过调用子程序MENU,设置显示器,并输出提示文档。

接着,读取‘1’-‘5’之间的ASCII 表示数。

然后,通过跳转表TABLE实现由输入参数转入相应的程序段。

由于表中按“字”存放数据,则每个数据的位移量是:0、2、4、6、8。

微机原理常用命令

微机原理常用命令

一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据。

1. 通用数据传送指令MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里)XLAT 字节查表转换.── BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,其范围是0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去) CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去) 三、逻辑运算指令AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器:源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1>无条件转移指令(长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为"0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.七、处理机控制指令:标志处理指令CLC(进位位置0指令)CMC(进位位求反指令)STC(进位位置为1指令)CLD(方向标志置1指令)STD(方向标志位置1指令)CLI(中断标志置0指令)STI(中断标志置1指令)NOP(无操作)HLT(停机)WAIT(等待)ESC(换码)LOCK(封锁)文案编辑词条B 添加义项?文案,原指放书的桌子,后来指在桌子上写字的人。

微机原理必备程序段

微机原理必备程序段

1.数据传送:问题描述:设在DS=3000H,偏移地址为0100H的内存中顺序存放着100个字节的数据。

要求传送到以2000H为起始偏移地址的区域。

代码:利用寄存器间接寻址来寻找操作数可以编程如下:mov ax,3000hmov ds,ax ;建立数据段mov si,0100h ;建立源数据指针mov di,2000h ;建立目的地指针mov cx,100 ;设置计数器nt:mov al,[si] ;取数mov [di],al ;送数inc si ;调整指针inc didec cx ;计数器减1jne nt ;CX-1≠0转nt 标号另一种方法:提示:若将倒数第2、3行用 REP MOVSB代替,则可进一步简化。

MOV AX,3000HMOV DS,AXMOV ES,AXMOV SI,0100HMOV DI,0200HMOV CX,100CLDNT:MOVSBLOOP NTINT 20H2.多字节的加法:问题描述:有两个4字节的无符号数相加,这两个数分别放在2000H和3000H开始的存储单元中,低位在前,高位在后。

运算后,得到的和放在2000H开始的内存单元中。

代码:MOV SI,2000H ;取第一个数的首地址MOV AX,[SI] ;将第一个数的低16位取到AXMOV DI,3000H ;取第二个数的首地址ADD AX,[DI] ;两个数的低16位相加。

MOV [SI],AX ;低16位相加的结果送到2000H和2001H单元MOV AX,[SI+2] ;取第一个数的高16位送到AX中ADC AX,[DI+2] ;两个数的高16位连同CF相加MOV [SI+2],AX ;高16位相加的结果送到2002H,2003H单元。

3.多字节组合BCD码十进制加法问题描述:设第一个数据在1000H开始的8个内存单元中,第二个数据在2000H开始的8个内存单元中,要求相加之后将结果放在2000H开始的内存区域。

微机原理与应用实验指导书

微机原理与应用实验指导书

目录第一篇汇编语言程序设计实验一汇编语言上机操作—比较字符串----------------------1-1 实验二循环程序设计—建立学生名次表---------------1-5 实验三显示器界面设计—光标轨迹程序----------------1-8 实验四键盘界面设计—键盘输入程序------------------1-10 实验五算术程序设计—判断闰年程序----------------1-22第二篇微机硬件实验系统实验一简单I/O口扩展实验-------------------2-1 实验二 8255并行口实验----------------------2-实验三 8253定时器/计数器接口实验-----------2-实验四 8250串口实验------------------------2-实验五存储器扩展实验-----------------------2- 实验六 8259中断控制器实验------------------2-实验七基于定时中断的实时控制综合实验-- ---2- 附录1 ASCII码表--------------------------3-1附录2 常用BIOS中断调用------------------3-2 附录3 INT 21H DOS系统功能调用------------3-5 附录4 PCI BIOS中断调用INT 1AH- -------3-11 附录5 汉字字符集表-----------------------3-13 附录6 DEBUG 主要命令------------- -------3-21第一篇汇编语言实验一汇编语言上机操作—比较字符串实验项目名称:比较字符串实验项目性质:普通所属课程名称:微机原理与应用实验计划学时:2一、实验目的1、学习程序设计的基本方法和技能;2、熟练掌握汇编语言设计、编写、调试和运行;二、实验内容和要求1、汇编语言上机操作方法编写程序,比较两个字符串STRING1和STRING2所含字符是否相同,若相同则在屏幕上显示‘MATCH’,否则显示‘NOT MATCH’。

微机原理程序

微机原理程序

微机原理程序(共7页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--;**********************; ;* 数/模转换实验1 *;;* 产生锯齿波 *;;**********************;io0832a equ 290hcode segmentassume cs:codestart: mov cl,0mov dx,io0832alll: mov al,clout dx,aladd cl,10push dxmov ah,06h ;判断是否有键按下 mov dl,0ffhint 21hpop dxjz lll ;若无则转LLLmov ah,4ch ;返回int 21hcode endsend start;**********************;;* 数/模转换实验2 *;;* 产生正弦波 *;;**********************;data segmentio0832a equ 290hSin db80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fd hdb0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96 hdb80h,66h,4eh,38h,25h,15h,09h,04hDb00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波数据data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,ax ll: mov si,offset sin ;置正弦波数据的偏移地址为SImov bh,32 ;一组输出32个数据lll: mov al,[si] ;将数据输出到D/A转换器mov dx,io0832aout dx,almov ah,06hmov dl,0ffhint 21hjne exitmov cx,1delay: loop delay ;延时inc si ;取下一个数据dec bhjnz lll ;若未取完32个数据则转llljmp llexit: mov ah,4ch ;退出int 21hcode endsend start;****************************;;* AD转换器2--示波器 *;;* 采集数据在屏幕是作图 *;;****************************;io0809b equ 299hcode segmentassume cs:codestart: mov ax,0012h ;设屏幕显示方式为VGA 640X480模示int 10hstart1:mov ax,0600hint 10h ;清屏and cx,0 ;cx为横坐标draw: mov dx,io0809b ;启动A/D 转换器通道1out dx,almov bx,200;500 ;延时delay: dec bxjnz delayin al,dx ;读入数据mov ah,0mov dx,368 ;dx为纵坐标sub dx,axmov al,0ah ;设置颜色mov ah,0ch ;画点int 10hcmp cx,639 ;一行是否满jz start1 ;是则转startinc cx ;继续画点push dxmov ah,06h ;是否有键按下mov dl,0ffhint 21hpop dxje draw ;无,则继续画点mov ax,0003 ;有恢复屏幕为字符方式int 10hmov ah,4ch ;返回int 21hcode endsend start;************************;;*8251串行通讯(自发自收)*;;************************;data segmentio8253a equ 280hio8253b equ 283hio8251a equ 2b8hio8251b equ 2b9hmes1 db 'you can play a key on the keybord!',0dh,0ah,24hmes2 dd mes1data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axmov dx,io8253b ;设置8253计数器0工作方式mov al,16hout dx,almov dx,io8253a mov al,52 ;给8253计数器0送初值out dx,almov dx,io8251b ;初始化8251xor al,almov cx,03 ;向8251控制端口送3个0delay: call out1loop delaymov al,40h ;向8251控制端口送40H,使其复位call out1mov al,4eh ;设置为1个停止位,8个数据位,波特率因子为16call out1mov al,27h ;向8251送控制字允许其发送和接收call out1lds dx,mes2 ;显示提示信息mov ah,09int 21hwaiti: mov dx,io8251bin al,dxtest al,01 ;发送是否准备好jz waitimov ah,01 ;是,从键盘上读一字符int 21hcmp al,27 ;若为ESC,结束jz exitmov dx,io8251ainc alout dx,al ;发送mov cx,40hs51: loop s51 ;延时next: mov dx,io8251bin al,dxtest al,02 ;检查接收是否准备好 jz next ;没有,等待mov dx,io8251ain al,dx ;准备好,接收mov dl,almov ah,02 ;将接收到的字符显示在屏幕上int 21hjmp waitiexit: mov ah,4ch ;退出int 21hout1 proc near ;向外发送一字节的子程序out dx,alpush cxmov cx,40hgg: loop gg ;延时pop cxretout1 endpcode endsend start;;8259中断查询方式应用实验;******************************** ******************************** *; 2008年03月为8259应用修改;******************************** ******************************** *I8259_1 EQU 2B0H ;8259的ICW1端口地址I8259_2 EQU 2B1H ;8259的ICW2端口地址I8259_3 EQU 2B1H ;8259的ICW3端口地址I8259_4 EQU 2B1H ;8259的ICW4端口地址O8259_1 EQU 2B1H ;8259的OCW1端口地址O8259_2 EQU 2B0H ;8259的OCW2端口地址O8259_3 EQU 2B0H ;8259的OCW3端口地址data segment mes1 db 'you can play a key on the keyboard!',0dh,0ah,24hmes2 dd mes1mess1 db 'Hello! This is interrupt * 0 *!',0dh,0ah,'$'mess2 db 'Hello! This is interrupt * 1 *!',0dh,0ah,'$'mess3 db 'Hello! This is interrupt * 2 *!',0dh,0ah,'$'mess4 db 'Hello! This is interrupt * 3 *!',0dh,0ah,'$'mess5 db 'Hello! This is interrupt * 4 *!',0dh,0ah,'$'mess6 db 'Hello! This is interrupt * 5 *!',0dh,0ah,'$'mess7 db 'Hello! This is interrupt * 6 *!',0dh,0ah,'$'mess8 db 'Hello! This is interrupt * 7 *!',0dh,0ah,'$'data endsstacks segmentdb 100 dup()stacks endsSTACK1 SEGMENT STACKDW 256 DUP()STACK1 ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:stacks,ES:DATA.386START: mov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axMOV DX,I8259_1 ;初始化8259的ICW1MOV AL,13H ;边沿触发、单片8259、需要ICW4OUT DX,ALMOV DX,I8259_2 ;初始化8259的ICW4MOV AL,0B0H ;非自动结束EOIOUT DX,AL;MOV AL,00H;OUT DX,ALMOV AL,03HOUT DX,ALMOV DX,O8259_1 ;初始化8259的OCW1MOV AL,00H ;打开IR0和IR1的屏蔽位OUT DX,ALQUERY: MOV AH,1 ;判断是否有按键按下INT 16HJNZ QUIT ;有按键则退出 MOV DX,O8259_3 ;向8259的OCW3发送查询命令MOV AL,0CHOUT DX,ALIN AL,DX ;读出查询字MOV AH,ALAND AL,80HTEST AL,80H ;判断中断是否已响应JZ QUERY ;没有响应则继续查询MOV AL,AHAND AL,07HCMP AL,00HJE IR0ISR ;若为IR0请求,跳到IR0处理程序CMP AL,01HJE IR1ISR ;若为IR1请求,跳到IR1处理程序 CMP AL,02HJE IR2ISRCMP AL,03HJE IR3ISRCMP AL,04HJE IR4ISRCMP AL,05HJE IR5ISRCMP AL,06HJE IR6ISRCMP AL,07HJE IR7ISRJMP QUERYIR0ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess1 ;显示提示信息MOV AH,09INT 21HJMP EOIIR1ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess2 ;显示提示信息MOV AH,09INT 21HJMP EOIIR2ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess3 ;显示提示信息MOV AH,09INT 21HJMP EOIIR3ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess4 ;显示提示信息MOV AH,09INT 21HJMP EOIIR4ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess5 ;显示提示信息MOV AH,09INT 21HJMP EOIIR5ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess6 ;显示提示信息MOV AH,09INT 21HJMP EOIIR6ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess7 ;显示提示信息MOV AH,09INT 21HJMP EOIIR7ISR: MOV AX,DATAMOV DS,AXMOV DX,offset mess8 ;显示提示信息MOV AH,09INT 21HEOI:MOV DX,O8259_2 ;向8259发送中断结束命令MOV AL,20HOUT DX,ALJMP QUERYQUIT: MOV AX,4C00H ;结束程序退出INT 21HCODE ENDSEND START;*******************************; ;* DMA传送实验(块传送) *;;* 2008年2月为8237扩展板修改 *; ;*******************************; io8237 equ 280h ;从8237地址code segmentassume cs:codestart:mov ax,0D000hmov es,axmov bx,4000hmov cx,0ffH;传输个数mov dl,40h;字符Arep1: inc dlmov es:[bx],dlinc bxcmp dl,5ahjnz ss1mov dl,40hss1: loop rep1mov dx,18h ;关闭主8237 mov al,04hout dx,almov dx,1dh ;复位主8237 mov al,00hout dx,almov dx,18h ;开启主8237,DACK信号高有效mov al,80hout dx,almov dx,1bh ;主8237为级联方式mov al,0c0hout dx,almov dx,io8237+08h ;关闭从8237mov al,04hout dx,almov dx,io8237+0dh ;复位从8237mov al,00hout dx,almov dx,io8237+02h ;写目的地址低位mov al,00hout dx,almov dx,io8237+02h ;写目的地址高位mov al,42hout dx,almov dx,io8237+03h ;传送字节数低位mov al,0ffhout dx,almov dx,io8237+03h ;传送字节数高位mov al,00hout dx,almov dx,io8237+00h ;源地址低位mov al,00hout dx,almov dx,io8237+00h ;源地址高位mov al,40hout dx,almov dx,io8237+0bh ;通道1写传输,地址增mov al,85hout dx,almov dx,io8237+0bh ;通道0读传输,地址增mov al,88hout dx,almov dx,io8237+08h ;DREQ低电平有效,存储器到存储器,开启从8237mov al,41hout dx,almov dx,io8237+09h ;通道1请求 mov al,04hout dx,almov cx,0F000hdelay: loop delaymov ax,0D000hmov es,axmov bx,04200h;目的地址起始mov cx,0ffh;读出字符个数rep2: mov dl,es:[bx]mov ah,02hint 21hinc bxloop rep2mov ax,4c00hint 21hcode endsend start;*******************;* 8253分频 *;*******************io8253a equ 280hio8253b equ 281hio8253c equ 283hcode segmentassume cs:codestart:mov dx,io8253c ;向8253写控制字mov al,36h ;使0通道为工作方式3out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253aout dx,al ;先写入低字节mov al,ahout dx,al ;后写入高字节mov dx,io8253cmov al,76h ;设8253通道1工作方式2out dx,almov ax,1000 ;写入循环计数初值1000mov dx,io8253bout dx,al ;先写低字节mov al,ahout dx,al ;后写高字节mov ah,4ch ;程序退出int 21hcode endsend start;*************************;;* 8253方式0计数器实验 *;;*************************;io8253a equ 283hio8253b equ 280hcode segmentassume cs:codestart: mov al,14h ;设置8253通道0为工作方式2,二进制计数mov dx,io8253aout dx,almov dx,io8253b ;送计数初值为0FHmov al,0fhout dx,allll: in al,dx ;读计数初值call disp ;调显示子程序push dxmov ah,06hmov dl,0ffhint 21hpop dxjz lllmov ah,4ch ;退出int 21hdisp proc near ;显示子程序push dxand al,0fh ;首先取低四位mov dl,alcmp dl,9 ;判断是否<=9jle num ;若是则为'0'-'9',ASCII 码加30Hadd dl,7 ;否则为'A'-'F',ASCII码加37Hnum: add dl,30hmov ah,02h ;显示 int 21hmov dl,0dh ;加回车符int 21hmov dl,0ah ;加换行符int 21hpop dxret ;子程序返回disp endpcode endsend start对不起,我题找不到了,但是我可以告诉你重点在哪 2012的题编程很多,但是选择填空都是很基本的问题。

微机原理指令汇总

微机原理指令汇总

微机原理指令汇总我现将指令系统中各种助记符的英文全名写出来,各种助记符的记忆就会变得很简单o(∩_∩)o...在这之前,先说一下寄存器:数据寄存器分为:AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.BH&BL=BX(base):基址寄存器,常用于地址索引;CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器.DH&DL=DX(data):数据寄存器,常用于数据传递。

他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。

这2组8位寄存器可以分别寻址,并单独使用。

另一组是指针寄存器和变址寄存器,包括:SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置;BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。

指令指针IP(Instruction Pointer)标志寄存器FR(Flag Register)OF(overflow flag)DF(direction flag)CF(carrier flag)PF(parity flag)AF(auxiliary flag)ZF(zero flag)SF(sign flag)IF(interrupt flag)TF(trap flag)(Segment Register)段寄存器.为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;堆栈段寄存器;(Stack Segment):SSES(Extra Segment):附加段寄存器。

微机原理指令知识点总结

微机原理指令知识点总结

微机原理指令知识点总结一、指令概述指令是计算机硬件执行的基本命令。

计算机中的指令由操作码和地址码两部分组成,操作码用来表示指令的功能,地址码用来表示操作数的地址。

根据指令的功能不同,可以分为数据操作指令、控制指令和I/O指令等。

指令的执行是按照存储在内存中的程序顺序执行的,每条指令都有其对应的操作过程和执行结果。

二、指令的格式在计算机中,指令一般由操作码、地址码和操作数等部分组成。

操作码用来表示指令的功能,地址码用来表示操作数的地址,操作数是指令执行的对象,可以是数据或者地址等。

指令的格式一般有以下几种:三地址指令、二地址指令、一地址指令和零地址指令。

不同的指令格式对应了不同的指令功能和操作方式,程序员需要根据具体的需求选择合适的指令格式。

三、指令的执行过程指令的执行过程一般包括指令的取指、指令的译码、指令的执行和存储结果等步骤。

在执行指令的过程中,计算机需要根据指令的操作码和地址码来确定要执行的操作以及操作数的来源。

指令的执行结果一般存储在寄存器或者内存中,以便后续的指令继续执行。

四、指令的体系结构指令的体系结构一般包括指令系统的设计原则、指令的寻址方式、指令的格式设计和指令的执行过程等内容。

指令系统的设计原则是指在设计指令系统时需要考虑的指导思想,例如简洁、高效和易于理解等。

指令的寻址方式是指指令中的地址码如何确定操作数的地址,有直接寻址、间接寻址、寄存器寻址和变址寻址等方式。

指令的格式设计是指指令的操作码、地址码和操作数等部分的组织方式,不同的格式设计对指令的功能和效率有着重要影响。

指令的执行过程是指计算机在执行指令时的操作过程和执行结果,需要考虑指令的周期、时序和流水线等方面。

五、常见的指令类型常见的指令类型包括数据操作指令、控制指令和I/O指令等。

数据操作指令是用来对数据进行操作的指令,包括数据传输、逻辑运算、算术运算和移位操作等。

控制指令是用来控制程序执行流程的指令,包括跳转、调用子程序、返回子程序和中断等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

五类常用程序:传输数据求最大最小值统计正负数排序加法程序
存储器清零或置FF
1.1将1000H-1063H中的各字节内容清0(或置FFH)
1.2传输数据块
将1000H-1063H中的字节内容传递到4000H-4063H
2.找最大值最小值
从2500H-2563H中存放着数据,把其中的最大值找出来,
地址存放在3000H中
3.统计负数正数
从2100H 开始存放100个无符号数,统计有多少个正数,
多少个负数。

负数个数存入2200H
4.1求1AH+02H+31H+14H+2FH+06H=???
数据1AH、0FH 、24H、4EH、18H、2DH
放在[3000H]- [3005H]处
4.2求十进制计算
25 74 89 67
+ 49 78 64 95
数据25 74 89 67放在[2400]- [2403]
数据49 78 64 95放在[2500]- [2503]
4.3将BLOCK单元开始的10个单元数相加,结果存放入BLOCK单元。

若相加过程中发生溢出,停止运算,并在DL中设置溢出标志FF.
5.冒泡排序方法
5.1字节型变量V AR1、V AR2和V AR3存放有3个无符号数,将其中的内容按从大到小重新排列。

解:经重新排列后,V AR1的值最大,V AR3的值最小。

由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。

编程思路:通过在三个数中找出最大值,将它与V AR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在V AR2中。

汇编语言程序如下:
5.2存放在2040H-2045H中的字节数据由大到小排列
1.1将1000H-1063H中的各字节内容清0(或置FFH)
MOV SI, 1000H
MOV CX, 0064H
XOR AL,AL
L1: MOV [SI], AL
INC SI
DEC CX
JNZ L1
HLT
1.2传输数据块
将1000H-1063H中的字节数据内容传递到4000H-4063H
MOV SI, 1000H
MOV DI, 4000H
MOV CX, 0064H
L1: MOV AL, [SI]
MOV [DI], AL
INC SI
INC DI
DEC CX
JNZ L1
HLT
2. 从2100H 开始存放100个无符号数,求最大值并存入单元2200H
MOV SI, 2100H
MOV CX, 0064H
XOR AL,AL
L1: CMP AL, [SI]
JNC L2
MOV AL , [SI]
L2: INC SI
DEC CX
JNZ L1
MOV [2200], AL
HLT
如果求最小值
XOR AL,AL 改为MOV AL,0FFH
JNC L2 改为JC L2
或者MOV [SI], AL
INC SI
相应MOV CX, 0063H
3.统计负数正数
从2100H 开始存放100个无符号数,统计有多少个正数,多少个负数。

负数个数存入2200H MOV SI, 2100H
MOV CX, 0064H
XOR DL,DL
L1: MOV AL, [SI]
AND AL,AL(/AND AL, FFH/TEST AL, 80H)
JNS L2
INC DL
L2: INC SI
LOOP L1
MOV [2200],DL
HLT
LOOP L1可以改为
DEC CX
JNZ L1
求最大最小值JNC JC
求正负数用JS JNS
4.1 1AH+0FH +24H+4EH+18H+2DH=???0E计算
数据1AH、0FH 、24H、4EH、18H、2DH放在[3000H]- [3005H]处
参考程序:
MOV SI,3000H
MOV CX,0006H
XOR AL,AL
AA: ADD AL,[SI]
INC SI
DEC CX
JNZ AA
MOV [3040H] ,AL
HLT
4.2求十进制计算
25 74 89 67
+ 49 78 64 95
数据25 74 89 67放在[2400]- [2403]
数据49 78 64 95放在[2500]- [2503]
MOV SI,2400H
MOV DI,2500H
MOV BX,2600H
MOV CX,0004H
XOR AL,AL
AA:MOV AL,[SI]
ADC AL,[DI]
DAA
MOV [BX],AL
INC SI
INC DI
INC BX
LOOP AA
HLT
5.冒泡排序方法
5.1字节型变量V AR1、V AR2和V AR3存放有3个无符号数,将其中的内容按从大到小重新排列。

解:经重新排列后,V AR1的值最大,V AR3的值最小。

由于变量中存放的数据为无符号数,因此应该采用JA、JAE、JB、JBE等指令。

编程思路:通过在三个数中找出最大值,将它与V AR1单元进行交换;然后对剩余的两个数进行比较,将较大值存放在V AR2中。

汇编语言程序如下:
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
DA TA SEGMENT
V AR1 DB 46H ;先假设一组值,以便检验程序设计的正确性
V AR2 DB 15H
V AR3 DB 0A2H
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,ES:DA TA,SS:STACK
START:
MOV AX, DA TA
MOV DS, AX
MOV ES, AX
MOV AX, STACK
MOV SS, AX
LEA SP,TOP
MOV AL,V AR1 ;用户编写的程序
CMP AL,V AR2
JAE NO_CHG1
XCHG AL,V AR2
NO_CHG1:
CMP AL,V AR3
JAE NO_CHG2
XCHG AL,V AR3
NO_CHG2:
MOV V AR1,AL ;最大值保存到V AR1
MOV AL,V AR2
CMP AL,V AR3
JAE NO_CHG3
XCHG AL,V AR3
MOV V AR2,AL ;次大值保存到V AR2
NO_CHG3:
MOV AH,4CH ;返回DOS操作系统
INT 21H
CODE ENDS
END START程序执行后,(V AR1)=0A2H,(V AR2)=46H,(V AR3)=15H,说明程序设计正确。

一般来说,在程序结束处,应该使之返回到DOS状态,以便进行其它操作。

当要排序的数据为有符号数时,只需要将程序中相应的JAE指令改成JGE指令。

存放在2040H-2045H中的字节数据由大到小排列
AA: MOV DL,00H
MOV SI,2400H
MOV CX,0006H
DEC CX
L0: MOV AL, [SI]
INC SI
CMP AL, [SI]
JNC L1
XCHG AL, [SI]
DEC SI
MOV [SI] , AL
INC SI
MOV DL,01H;
L0: LOOP L1
DEC DL
JZ AA
HLT。

相关文档
最新文档