微机原理五类常用程序

微机原理五类常用程序
微机原理五类常用程序

五类常用程序:传输数据求最大最小值统计正负数排序加法程序

存储器清零或置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:DATA,ES:DATA,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 VAR1,AL ;最大值保存到V AR1

MOV AL,VAR2

CMP AL,VAR3

JAE NO_CHG3

XCHG AL,V AR3

MOV VAR2,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

微机原理知识点总结

第一章概述 1.IP核分为3类,软核、硬核、固核。特点对比 p12 第二章计算机系统的结构组成与工作原理 1. 计算机体系结构、计算机组成、计算机实现的概念与区别。P31 2. 冯·诺依曼体系结构: p32 硬件组成五大部分 运算器、存储器、控制器、输入设备、输出设备,以存储器为中心 信息表示:二进制计算机内部的控制信息和数据信息均采用二进制表示,并存放在同一个存储器中。 工作原理:存储程序/指令(控制)驱动编制好的程序(包括指令和数据)预先经由输入设备输入并保存在存储器中 3.接口电路的意义 p34 第二段 接口一方面应该负责接收、转换、解释并执行总线主设备发来的命令,另一方面应能将总线从设备的状态或数据传送给总线主设备,从而完成数据交换。 4.CPU组成:运算器、控制器、寄存器。P34 运算器的组成:算术逻辑单元、累加器、标志寄存器、暂存器 5.寄存器阵列p35 程序计数器PC,也称为指令指针寄存器。存放下一条要执行指令的存放地址。 堆栈的操作原理应用场合:中断处理和子程序调用 p35最后一段 6. 计算机的本质就是执行程序的过程p36 7. 汇编语言源程序——汇编——>机器语言程序 p36 8. 指令包含操作码、操作数两部分。执行指令基本过程:取指令、分析指令、执行指令。简答题(简述各部分流程)p37 9. 数字硬件逻辑角度,CPU分为控制器与数据通路。P38 数据通路又包括寄存器阵列、ALU、片上总线。 10. 冯·诺依曼计算机的串行特点p38 串行性是冯·诺依曼计算机的本质特点。表现在指令执行的串行性和存储器读取的串行性。也是性能瓶颈的主要原因。 单指令单数据 11. CISC与RISC的概念、原则、特点。对比着看 p39、40

微机原理程序 (2)

实验二:循环程序设计 2. DA TA SEGMENT x db -78,127,-128,-125,88 y db 32,-43,76,95,1 S db 5 dup(?) data ends Code segment Assume cs:code,ds:data Start:mov ax,data Mov ds,ax Mov cx,5 Mov bx,0 L1:mov al,x[bx] Add al,y[bx] Inc bx Loop L1 MOV AH,4CH INT 21H CODE ENDS END START 3. DA TA SEGMENT Y DB 68H,24H,90H,57H,13H HX DB 67H,34H,12H,90H,57H S DB 5 DUP(?) DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START:MOV AX,DATA MOV DS,AX MOV CX,5 MOV SI,OFFSET X MOV DI,OFFSET Y LP:MOV AL,[SI] MOV AH,[DI] ADC AL,AH DAA MOV S[SI],AL INC SI INC DI LOOP LP MOV AH,4CH INT 21H

CODE ENDS END START 4、 DA TA SEGMENT LIST DB 0,1,2,3,4,5,6,7,8,9 COUNT EQU $-LIST DA TA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START:MOV AX,DATA MOV DS,AX MOV CX,COUNT-1 LOOP1:MOV DX,CX MOV BX,0 LOOP2:MOV AX,LIST[BX] CMP AX,LIST[BX+1] MOV LIST[BX],AX LOOP3:INC BX LOOP LOOP2 MOV CX,DX LOOP LOOP1 MOV AX,4CH INT 21H CODE ENDS END START 实验三:子程序调用程序设计 DA TA SEGMENT NUM DB 85,77,126,-1,-43,37,-128,11,-19,13 DA TA ENDS ADDITION SEGMENT NUM1 DB 10 DUP(?) ADDITION ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,ES:ADDITION START:AX,DATA MOV DS,AX MOV AX,ADDITION MOV ES,AX CALL ORDER CALL COPY MOV AH,4CH INT 21H ORDER PROC MOV CX,9

浙江大学微机原理(DSP)考试必背(知识点及基本程序部分)

第二章系统控制与中断+老师复习时专讲的中断内容 1、【强记】void InitSysCtrl( ) void InitSysCtrl() { EALLOW; WDCR=0x0068; //屏蔽WatchDog PLLCR=0xA; //锁相环设为10/2=5倍频(使系统时钟30MHz*5=150MHz) //PLLCR可设0x0~0xA,其中0x0和0x1等效,均为1/2=0.5倍频for(i= 0; i< ( (131072/2)/12 ); i++) {;} HISPCP=1; // HISPCLK=SYSCLK/HISPCP*2,从而有75MHz LOSPCP=2; // LOSPCLK=SYSCLK/LOSPCP*2,从而有37.5MHz PCLKCR=0x0D0B; //写1开启部分外设,这里开启了SCIA/B,SPI,ADC,EV A/B //0000 1101 0000 1011 EDIS; } 2、解释WatchDog(看门狗)工作原理(记住位域名称与功能) 片内振荡器时钟OSCCLK经过分频后进入8位看门狗计数器,当计数器上溢,则可输出中断或复位信号。当看门狗使能,若系统正常运行,则需用户周期性地在看门狗计数器上溢前向复位寄存器WDKEY写入0x55+0xAA来清零计数器,若程序受干扰而跑飞,则看门狗的中断或复位信号可使系统恢复至正常状态,提高系统稳定性与可靠性。 补充——涉及寄存器: 系统控制和状态寄存器SCSR:WDENINT指定看门狗输出复位信号还是中断信号;WDOVERRIDE指定是否允许用户修改控制寄存器WDCR的WDDIS位; 计数寄存器WDCNTR:低8位连续加计数,可由复位寄存器WDKEY立即清零; 复位寄存器WDKEY:连续写入0x55+0xAA可清零计数寄存器WDCNTR,写入其它序列则立即触发看门狗复位事件。读该寄存器返回控制寄存器WDCR值; 控制寄存器WDCR:WDFLAG为看门狗复位状态标志位,若复位事件由看门狗触发则置1,用户写1清零;WDDIS写1使能,写0屏蔽看门狗;WDCHK必须写101才能写WDCR 寄存器;WDPS为看门狗计数器时钟相对于OSCCLK/512的分频系数。 3、解释PLL(锁相环)工作原理 PLL负责把片内振荡器时钟或外部时钟经过倍频转化为系统时钟SYSCLKOUT。 当引脚XF_XPLLDIS为低电平:PLL被禁止,系统时钟直接引用外部时钟源。 当引脚XF_XPLLDIS为高电平:若PLLCR为0,则PLL被旁路,片内振荡器时钟OSCCLK被二分频;若PLLCR为n(n=0x1~0xA),则PLL使能,OSCCLK被(n/2)倍频。 4、【强记】为了使CPU定时器工作在指定频率,应如何设置 void InitSysCtrl(); void InitCputimer(void) //定时器初始化,中断周期为1ms(1kHz) { EALLOW; TIMER0TPR=149;//CPU定时器分频寄存器,150MHz/(149+1)=1MHz的计时器时钟TIMER0TPRH=0;//CPU定时器分频寄存器的高位置0 TIMER0PRD=(long)999;//设置CPU定时器周期寄存器,1MHz/(999+1)=1kHz

微机原理指令合集

地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断(INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例:MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src)比较指令:CMP dst,src(相减但不送回目的操作数,结果都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量)段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回:RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD 地址总线:AB(单向输出) 数据总线:DB(双向总线) 控制总线:CB(输出输入或双向) 4个16位数据寄存器:AX累加器.BX基址寄存器.CX计 数寄存器.DX数据寄存器 高八位记作:AH.BH.CH.DH低八位ALBLCLDL 指针寄存器:SP 堆栈指针寄存器BP基址指针寄存器 变址寄存器:SI 源变址寄存器(源操作数偏移地址)DI 目的变址寄存器 进位标志位:CF最高位 奇偶标志位:PF 低8位1的个数为偶时为1 辅助进位标志位:AF低4位 向高4为有进位时 零标志位:ZF算术逻辑运算为零时为1 符号标志位:SF运算结果最高位为1时为1 溢出标志位:OF结果超出有符号数补码表示的范围时为 1 跟踪标志位:TF单步中断方式逐条检查 方向标志位:DF 中断允许标志位:IF为1时CPU可以响应可屏蔽中断 (INTR)请求 立即数寻址:MOV BL,5BH 寄存器寻址:MOV DS,AX 存储器寻址: 直接寻址:MOV AX,[2000H] 寄存器间接寻址:MOV AX,[BP] 操作数有效地址在BX,BP,SI,DI,当在BX ,SI,DI中 默认DS为基址,在BP中默认SS为基址 寄存器相对寻址:MOV AX,COUNT[SI] 例: MOV BP:[DI+45H] 基址加变址寻址:MOV AX, [SI+BP] 相对基址加变址寻址指令MOV AX, [SI+BP+1234H] 指令 数据传送指令MOV dst,src 交换指令:XCHG dst,src 查表指令:XLA T[表首址]DS:(BX+AL)给AL 堆栈传送指令:PUSH src 取偏移地址指令;LEA dst,src 指针送寄存器和DS:LDS dst,src 指针送寄存器和ES:LES dst,src 标志传送指令:LAHF SAHF PUSHF POPF 输入、输出指令:IN.OUT 加法指令:ADD dst,src 带进位加法指令:ADC dst,src (CF也要加) 加1指令:INC dst 减法指令:SUB dst,src 带借位减法指令:SBB dst,src(也要减CF) 减1指令:DEC src111 求补指令:NEG src (0减src) 比较指令:CMP dst,src(相减但不送回目的操作数,结果 都不变) 乘法指令:MUL src 字节操作数:AL*src给AX 字操作 数:AX*src给AX 带符号数乘法指令:IMUL src 字运算AX字节运算AL 除法指令:DIV src 字节将AX/src给AL余数该AH 字 将(DX,AX)/src给AX 余数给DX 带符号数除法指令:IDIV src CBW 将字节转换为字CWD将字转换为字节 逻辑运算: 逻辑与:AND dst,src 逻辑或:OR dst,src 非:NOT dst 异或:XOR dst,src 测试:TEST dst,src(测试判断某些位知否同时为0) 移位指令 算术左移指令SAL dst, CL;移位位数 逻辑左移指令SHL dst ,CL;移位位数 算术右移指令:SAR dst ,CL;移位位数 逻辑右移指令:SHR dst,CL ;移位位数 循环移位指令: 循环左移指令:ROL dst,CL;移位位数 循环右移指令:ROR dst,CL;移位位数 带进位循环左移:RCL dst,CL;移位位数 带进位循环右移:RCR dst,CL;移位位数 串操作指令: 串传送指令:MOVS/W 串比较指令:CMPSB/W 串搜索指令:SCASB/W 取串指令:LODS/W 存串指令:STOSB/W 重复前缀指令:REP SOPR 重复执行REP指令后紧跟着 的一个串操作指令,知直到CX寄 存器中的值为0 REPE/REPZ执行REPE/REPZ后紧跟的 一个串操作指令,当相等、为0时重复,直到CX=0/ZF=0 REPNE/REPNZ 执行REPNE/REPNZ后紧跟的串操作指 令当不为0、不相等时重复,直到CX=0/ZF=0 转移指令: 远程转移:JMP FAR PTR OPRD(IP=IP+16位移量) 近程转移:JMP NEAR PTR OPRD (IP=IP+8位移量) 段内间接转移:JMP reg16 JMP men16 (IP)←reg16或men16 段间间接转移:JMP DWORD PTR [BX+SI] 调用和返回指令: 段内直接调用:CALL dst(SP=SP-2,SP+1,IP指向 SP,IP=IP+16 段内直接调用:CALL dst (同,同,EA指向IP) 段间直接调用:CALL dst(SP=SP-2,SP+1,CS指向 SP,SP=SP-2,SP+1,IP指向SP, 偏移地址指向IP,段地址指向CS) 段间间接调用:CALL dst 段内返回: RET(IP=SP+1,SP,SP=SP+2) 段内带立即数返回:RET n 循环控制指令: LOOP OPRD(CX=CX-1,若CX≠0则循环 LOOPNZ/LOOPE OPRD(CX=CX-1,若CX≠0ZF=0则 循环) LOOPZ/LOOPE OPRD

微机原理程序

一,在数据段从TABLE开始定义10无符号的数据,每个数据为一个字节,计算这10个数的和,结果放到SUM字单元之中 DA TA SEGMENT TABLE DB 12H, 23H, 34H, 45H, 56H DB 67H, 78H, 89H, 9AH, 0FDH SUM DW DA TA ENDS STACK SEGMENT D8 5 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK START: MOV AX, DATA MOV DS, AX MOV ES, AX MOV AX,STACK MOV SS, AX LEA SI, TABLE MOV CX, 10 XOR AX, AX NEXT: ADD AL , 0 INC SI LOOP NEXT MOV SUM, AX MOV AH, 4CH INT 21H CODE ENDS ENDS START

二,在数据段自TABLE开始的连续10个单元中有放在0-9的平方值,查表求任意数X (0<=X<=9)的平方值,并将结果放到RESULT中 三,在数据段定义2个数据,每个数据占有若干字节,按照低地址存储低数据位的原则存储,这两个数据长度一样,计算这2个数据的和,并将结果放到RESULT中。 四、用8255PA作开关量输入口,PB作输出口。 CODE SEGMENT ASSUME CS:CODE ,DS:CODE ,ES:CODE ORG 32E0H PA EQU 0FFD8H PB EQU 0FFD9H PC EQU 0FFDAH PCTL EQU 0FFDBH HI:MOV DX,PCTL MOV AL,90H OUT DX,AL PI:MOV DX,PA IN AL,DX INC DX OUT DX,AL JMP PI CODE ENDS END HI

微机原理程序

;**********************; ;* 数/模转换实验1 *; ;* 产生锯齿波 *; ;**********************; io0832a equ 290h code segment assume cs:code start: mov cl,0 mov dx,io0832a lll: mov al,cl out dx,al add cl,10 push dx mov ah,06h ;判断是否有键按下 mov dl,0ffh int 21h pop dx jz lll ;若无则转LLL mov ah,4ch ;返回 int 21h code ends end start ;**********************; ;* 数/模转换实验2 *; ;* 产生正弦波 *; ;**********************; data segment io0832a equ 290h Sin db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96 h db 80h,66h,4eh,38h,25h,15h,09h,04h Db 00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波数据 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax ll: mov si,offset sin ; 置正弦波数据的偏移地址为SI mov bh,32 ;一组输出32个数据 lll: mov al,[si] ;将数据输出到D/A转换器 mov dx,io0832a out dx,al mov ah,06h mov dl,0ffh int 21h jne exit mov cx,1 delay: loop delay ;延时 inc si ;取下一个数据 dec bh jnz lll ;若未取完32个数据则转lll jmp ll exit: mov ah,4ch ;退出 int 21h code ends end start ;****************************; ;* AD转换器2--示波器 *; ;* 采集数据在屏幕是作图 *; ;****************************; io0809b equ 299h code segment assume cs:code start: mov ax,0012h ;设屏幕显示方式为VGA 640X480模示 int 10h start1: mov ax,0600h int 10h ;清屏 and cx,0 ;cx为横坐标draw: mov dx,io0809b ;启动A/D转换器通道1 out dx,al mov bx,200;500 ;延时delay: dec bx jnz delay

微机原理与接口技术知识点总结

微机原理与接口技术 第一章概述 二、计算机中的码制(重点 )P5 1、对于符号数,机器数常用的表示方法有原码、反码和补码三种。 注意:对正数,三种表示法均相同。它们的差别在于对负数的表示。 (1)原码 定义: 符号位:0表示正,1表示负; 数值位:真值的绝对值。 注意:数0的原码不唯一 (2)反码 定义:若X<0,则[X]反= 对应原码的符号位不变,数值部分按位求反 (3)补码 定义:若X<0,则[X]补= [X]反+1 2、8位二进制的表示范围: 原码:-127~+127 反码:-127~+127 补码:-128~+127 3、特殊数10000000 ●该数在原码中定义为:-0 ●在反码中定义为:-127 ●在补码中定义为:-128 ●对无符号数:(10000000)2= 128 三、信息的编码 1、字符的编码P8 计算机采用7位二进制代码对字符进行编码 (1)数字0~9的编码是0110000~0111001,它们的高3位均是011,后4位正好与其对应的二进制代码(BCD码)相符。 (2)英文字母A~Z的ASCII码从1000001(41H)开始顺序递增,字母a~z的ASCII码从1100001(61H)开始顺序递增,这样的排列对信息检索十分有利。

第二章微机组成原理 第一节、微机的结构 1、计算机的经典结构——冯.诺依曼结构P11 (1)微机由CPU(运算器和控制器)、存储器和I/O接口组成 2、系统总线的分类 (1)数据总线(Data Bus),它决定了处理器的字长。 (2)地址总线(Address Bus),它决定系统所能直接访问的存储器空间的容量。 (3)控制总线(Control Bus) 第二节、8086微处理器 1、8086,其内部数据总线的宽度是16位,16位CPU。外部数据总线宽度也是16位 8086地址线位20根,有1MB(220)寻址空间。P27 2、8086CPU从功能上分成两部分:总线接口单元(BIU)、执行单元(EU) BIU:负责8086CPU与存储器之间的信息传送。EU:负责指令的执行。P28 4、寄存器结构(重点 ) 1)数据寄存器特有的习惯用法P30 ●AX:(Accumulator)累加器。多用于存放中间运算结果。所有I/O指令必须都通过AX与接口传送信息; ●BX:(Base)基址寄存器。在间接寻址中用于存放基地址; ●CX:(Counter)计数寄存器。用于在循环或串操作指令中存放循环次数或重复次数; ●DX:(Data)数据寄存器。在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存放I/O端口地址。 2)、指针和变址寄存器P31 ●SP:(Stack Pointer)堆栈指针寄存器,其内容为栈顶的偏移地址; ●BP:(Base Pointer)基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。●SI:(Source Index)源变址寄存器Index:指针 ●DI:(Destination Index)目标变址寄存器 变址寄存器常用于指令的间接寻址或变址寻址。 3)、段寄存器P28 CS:(Code Segment)代码段寄存器,代码段用于存放指令代码 DS:(Data Segment)数据段寄存器 ES:(Extra Segment)附加段寄存器,数据段和附加段用来存放操作数 SS:(Stack Segment)堆栈段寄存器,堆栈段用于存放返回地址,保存寄存器内容,传递参数 4)、指令指针(IP)P29 16位指令指针寄存器,其内容为下一条要执行的指令的偏移地址。 5)、标志寄存器 (1)状态标志:P30 ●进位标志位(CF):(Carry Flag)运算结果的最高位有进位或有借位,则CF=1 。Carry:进位Auxiliary :辅助 ●辅助进位标志位(AF):(Auxiliary Carry Flag)运算结果的低四位有进位或借位,则AF=1

微机原理实验报告

汇编语言程序设计实验 一、实验内容 1.学习并掌握IDE86集成开发环境的使用,包括编辑、编译、链接、 调试与运行等步骤。 2.参考书例4-8,P165 (第3版161页)以单步形式观察程序的 执行过程。 3.修改该程序,求出10个数中的最大值和最小值。以单步形式观 察,如何求出最大值、最小值。 4.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态。 二、实验目的 1.学习并掌握IDE86集成开发环境的使用 2.熟悉汇编语言的基本算法,并实际操作 3.学会利用IDE86进行debug的步骤 三、实验方法 1.求出10个数中的最大值和最小值 (1)设计思路:利用冒泡法,先对数据段的10个数字的前2个比 较,把二者中大的交换放后面。在对第二个和第三个数比较,把 二者中较大的交换放后面,依此类推直到第十个数字。这样第十 位数就是10个数里面最大的。然后选出剩下9个数字里面最大 的,还是从头开始这么做,直到第九个数字。以此类推直到第一 个数字。

(2)流程图 2.求1到100 的累加和,并用十进制形式将结果显示在屏幕上。 要求实现数据显示,并返回DOS状态

(1)设计思路:结果存放在sum里面,加数是i(初始为1),进行 100次循环,sum=sum+I,每次循环对i加1. (2)流程图: 四、 1.求出10个数中的最大值和最小值

DSEG SEGMENT NUM DB -1,-4,0,1,-2,5,-6,10,4,0 ;待比较数字 DSEG ENDS CODE SEGMENT ASSUME DS:DSEG,CS:CODE START:MOV AX,DSEG MOV DS,AX LEA SI,NUM MOV DX,SI MOV CL,9 ;大循环计数寄存器初始化 NEXT1:MOV BL,CL ;大循环开始,小循环计数器初始化MOV SI,DX NEXT2:MOV AL,[SI+1] CMP [SI],AL ;比较 JGGONE ;如果后面大于前面跳到小循环末尾CHANGE:MOV AH,[SI] ;交换 MOV [SI+1],AH MOV [SI],AL JMP GONE GONE:add SI,1 DEC BL JNZ NEXT2

微机原理程序题

1. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sign与sinteger 均为双字变量。 if ( sinteger = = 0) sign = = 0; else If ( siteger > 0) sign = 1; else sign = -1; mov eax,sinteger mov edx,sign cmp eax,0 jnz L1 mov ebx,0 L1:cmp ebx,0 jl L2 mov ebx,1 L2:mov ebx,-1 2. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中ch1与caps均为字节变量。 if (ch1> =’a’ && ch1< =’z’) caps= =0; if (ch1> =’A’ && ch1< =’Z’) caps= =1; mov ax,ch1 mov bx,caps cmp ax,a jb next cmp ax,z ja next mov bx,0 next:cmp ax,A jl done cmp ax,Z ja done done: 3. 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段,其中sum与i变量均为双字变量。 sum=0; for ( i=1;i< =100;i++) if ( i%2= =0) sum=sum+i; mov ecx,i mov ecx,1 .while(ecx<=100)

mov eax,ecx xor edx,edx mov ebx,2 div ebx cmp edx,0 jnz next add sum,ecx next:inc ecx .endw 1. 能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,并把它们存放在数组Lyear中。 算法描述 ; esi=0;ecx=2012; ; while (ecx<2100) ; { if (year mod 4=0 and year mod 100 <>0) or (year mod 400=0) then ; {Lyear[esi]=ecx;esi++;} ; ecx++; ; } ; Lcounter=esi; include io32.inc .data Lyear dword 100 dup(?) Lcounter dword 0 .code mainproc xor esi,esi ;esi闰年个数计数器,兼做Lyear下标。 mov ecx,2012 ;ecx年份计数器。 .while (ecx<2100) mov eax,ecx xor edx,edx mov ebx,400 div ebx cmp edx,0 jz leap ;if year mod 400=0 then goto leap mov eax,ecx xor edx,edx mov ebx,4 div ebx cmp edx,0 jnz next ;if year mod 4<>0 then goto next mov eax,ecx xor edx,edx mov ebx,100 div ebx

浙大远程微机原理与接口技术离线作业答案(必做) 答案

浙江大学远程教育学院 《微机原理与接口技术》课程作业 姓名:学号: 年级:学习中心:—————————————————————————————第二章P47 2.80C51单片微机芯片引脚第二功能有哪些? 答:80C51单片机的P0、P2和P3引脚都具有第二功能。 第一功能第二变异功能 P0口地址总线A0~A7/数据总线D0~D7 P2口地址总线A8~A15 P3.0 RXD (串行输入口) P3.1 TXD (串行输出口) INT(外部中断0) P3.2 0 INT(外部中断1) P3.3 1 P3.4 T0 (定时器/计数器0的外部输入) P3.5 T1 (定时器/计数器0的外部输出) P3.6 WR(外部读写存储器或I/O的写选通) P3.7 RD(外部读写存储器或I/O的读选通) 4.80C51存储器在结构上有何特点?在物理上和逻辑上各有哪几种地址空间? 访问片内数据存储器和片外数据存储器的指令格式有何区别? 答:80C51单片机采用哈佛(Har-yard)结构,即是将程序存储器和数据存储器截然分开,分别进行寻址。不仅在片内驻留一定容量的程序存储器和数据存储器及众多的特殊功能寄存器,而且还具有强的外部存储器扩展能力,扩展的程序存储器和数据存储器寻址范围分别可达64KB。 ⒈在物理上设有4个存储器空间 ●片内程序存储器; ●片外程序存储器; ●片内数据存储器; ●片外数据存储器。 ⒉在逻辑上设有3个存储器地址空间 ●片内、片外统一的64 KB程序存储器地址空间。 ●片内256B(80C52为384 B)数据存储器地址空间。

片内数据存储器空间,在物理上又包含两部分: -对于80C51型单片机,从0~127 字节为片内数据存储器空间;从128~255 字节为特殊功能寄存器(SFR)空间(实际仅占用了20多个字节)。 ●片外64 KB的数据存储器地址空间。 在访问三个不同的逻辑空间时,应采用不同形式的指令,以产生不同存储空间的选通信号。 访问片内RAM采用MOV指令,访问片外RAM则一定要采用MOVX指令,因为MOVX 指令会产生控制信号RD或WR,用来访问片外RAM。访问程序存储器地址空间,则应采用MOVC指令。 6.80C51片内数据存储器低128个存储单元划分为哪4个主要部分?各部分主要功能是什么? ●答:寄存器区:共4组寄存器,每组8个存储单元,各组以R0~R7作为单元编号。 常用于保存操作数及中间结果等等。R0~R7也称为通用寄存器,占用00H~1FH 共32个单元地址。 ●位寻址区:20H~2FH,既可作为一般RAM单元使用,按字节进行操作,也可以 对单元中的每一位进行位操作,称为位寻址区。寻址区共有16个RAM单元,共 计128位,位地址为00H~7FH。 ●堆栈区:设置在用户RAM区内。 ●用户RAM区:在内部RAM低128单元中,除去前面3个区,剩下的所有单元。 第三章P87 9.MOV、MOVC、MOVX 指令有什么区别,分别用于那些场合,为什么? 答:MOV指令用于对内部RAM的访问。 MOVC指令用于对程序存储器的访问,从程序存储器中读取数据(如表格、常数等)。MOVX指令采用间接寻址方式访问外部数据存储器,有Ri和DPTR两种间接寻址方式。MOVX指令执行时,在P3.7引脚上输出RD有效信号或在P3.6引脚上输出WR有效信号,可以用作外部数据存储器或I/O的读或写选通信号,与单片机扩展电路有关。 15.已知(R1)=20H,(20H)=AAH,请写出执行完下列程序段后A的内容。 MOV A,#55H ANL A,#0FFH ORL 20H,A XRL A,@R1 CPL A 答:各指令执行结果如下: MOV A,#55H ;(A)=55H ANL A,#0FFH ;(A)=55H XRL A,@R1 ;(A)=AAH CPL A ;(A) =55H

相关文档
最新文档