西电微机原理上机作业第三

合集下载

微机原理第3章作业及答案

微机原理第3章作业及答案

第3章指令系统习题解答1. 若DS=3000H,BP=2000H,SI=1000H,[32000H]=00H,[32001H]=40H,SS=3000H,[31000H]=20H,[31001H]=60H,[33000H]=50H,[33001H]=60H,说明下列各条指令执行后,AX中的内容是什么?并说明各条指令中源操作数的寻址方式。

(1) MOV AX,DS (2) MOV AX,[2000H](3) MOV AX,[SI] (4) MOV AX,[BP](5) MOV AX,[BP+SI]【解】(1)AX=3000H 寄存器寻址(2)AX=4000H 直接寻址(3)AX=6020H 寄存器间接寻址(4)AX=4000H 寄存器间接寻址(5)AX=6020H 基址加变址寻址2. 指出下列指令中的非法指令。

(1) MOV BX,AL (2) MOV CS,2000H(3) PUSH 4567H (4) XCHG VAR1,VAR2(5) ADD AL,148H (6) MOV DS,2000H(7) MOV BH,SI (8) SUB 38H,AL【解】非法指令:(1) MOV BX,AL BX和AL的长度不一致(2) MOV CS,2000H CS段寄存器不能作目的操作数(3) PUSH 4567H 只能将寄存器或存储单元的内容压入堆栈,不能是立即数(4) XCHG VAR1,V AR2 两个存储单元之间不能直接交换数据(5) ADD AL,148H 运算溢出(6) MOV DS,2000H 立即数不能直接传送给DS段寄存器(7) MOV BH,SI BH和SI的长度不一致(8) SUB 38H,AL 目的操作数不能是立即数3. 若SP=2000H,AX=3355H,BX=4466H,试指出下列指令或程序段执行后有关寄存器的内容。

(1) PUSH AX执行后AX=?,SP=?(2) PUSH AXPUSH BXPOP DXPOP CX执行后AX=?,CX=?,DX=?,SP=?【解】(1) 执行后AX=3355H,SP=1FFEH(2) 执行后AX=3355H,CX=3355H,DX=4466H,SP=2000H4. 请按下面的要求写出相应的汇编指令或指令序列。

西电微机原理与系统设计上机报告

西电微机原理与系统设计上机报告

微机原理与系统设计上机报告学号:*******姓名:**指导老师:**时间:2016年11月西安电子科技大学内容一 Debug程序的使用一、实验目的1. 学习使用DEBUG调试命令。

2. 学习用DEBUG调试简单程序。

3. 通过程序验证码制及其对标志位的影响。

4. 通过调试熟悉和掌握各寄存器的作用与特点。

二、实验内容用DEBUG调试简单程序。

三、实验仪器微机一台四、实验步骤1.由DOS进入DEBUG调试环境。

(1)DEBUG将调试程序装入内存注意:当机器控制权由DOS成功地转移给调试程序后,将显示“-”号,它是DEBUG的状态提示符,表示可以接受调试子命令了。

(2)-R 显示CPU中各寄存器当前初始内容,请记录下列各项:AX=0000 BX=0000 CX=0000 DX=0000 BP=0000 SI=0000 DI=0000 DS=13E0 ES=13E0 SS=13E0 SP=FFEE CS=13E0 IP=0100 FLAG寄存器中的8个标志位状态值是:OF DF IF SF ZF AF PF CFNV UP EI PL NZ NA PO NC DEBUG用符号给出标志寄存器中8个标志位的当前状态,其含义如下表所示。

标志位含义‘1’的对应符号‘0’的对应符号OF溢出OV有NV无DF方向DN递减UP递增IF中断EI允许DI禁止SF符号NG负PL正ZF全零ZR零NZ非零AF辅助进位AC有NA无PF奇偶性PE偶PO奇CF进位CY有NC无2.用DEBUG调试简单程序例1 -A CS:0106MOV AX,1234MOV BX,2345MOV CX,0ADD AX,BXMOV CX,AXINT 20运行程序(注:执行程序时IP应指向要执行的指令,需要修改该寄存器-RIP当前值输入需要值该处为0106,当然也可以在T或G命令中指出程序起始地址)-R 显示各寄存器当前内容及首条指令-T 3 跟踪执行三条赋值传送指令,观察寄存器及标志位-T 2跟踪执行相加及送和数指令,观察寄存器及标志位-G 执行软件中断指令INT 20,机器将显示“程序正常终止”的信息,并显示“-”,表明仍处在DEBUG的调试控制状态下,注意未用T命令,因为我们不想进入到20H中断处理程序中去,P命令也可实现相同操作实验现象记录:观察与记录按照上述要求命令执行后,哪些寄存器和标志位发生了变化。

微机原理第三章习题答案

微机原理第三章习题答案

习题3答案1. 指出下列指令的错误原因。

(1) AND AX, DL ;类型不匹配(2) ADD CS, DX ;CS不能作为目的操作数(3) MOV AX, IP ;IP不能作为指令的操作数(4) MOV [BP][SI], [SI] ;两个操作数不能同时为内存操作数(5) SUB [BP][SI], ES:DX ;段超越前缀只能用在内存操作数之前(6) XCHG AL, [SI][DI] ;没有[SI][DI]这种操作数形式(7) JGE AX ;条件转移指令的操作数只能是标号(8) PUSH DL ;对堆栈不能进行字节操作2. 用一条指令将BX清0。

(请给出3种方法)方法1:MOV BX, 0方法2:SUB BX, BX方法3:AND BX, 0 ;将BX和0做与,可以将BX清零方法4:XOR BX, BX3. 写出实现下列功能的指令序列。

(1) 判断AX的值,若AX等于0,则转到标号LABEL处。

(请写出3种方法)方法1:CMP AX, 0JZ LABEL ; 如果ZF = 0,说明AX为0,因为CMP指令是做减法,但是不写回结果; 因此指令执行后AX内容不会受到破坏方法2:TEST AX, 0FFHJZ LABEL ; 如果ZF = 0,说明AX为0,TEST指令做与运算,可是不写回结果,只影响标志位。

; 和0与清零,和1与不变,所以和FFH做与的结果是AX本身,但是此时标志位已; 经改变了,所以可以利用标志位来判断,但是AX内容却没有受到任何破坏方法3:AND AX, 0FFH ;这个方法的原理和方法2其实是完全一致的JZ LABEL(2) 将AL的高4位与低4位分别放入AH与AL的低4位,并将AH与AL的高4位清0。

MOV AH, ALAND AL, 0FH ; AL高4位通过与清零,而低4位保持不变MOV CL, 4SHR AH, CL ; 这两条指令通过逻辑右移将AH的高4位清零,因为SHR在右移后,高位补零(3) 若AX和BX中的数恰好1个是奇数、1个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。

微机原理作业参考答案(1,2,3章)

微机原理作业参考答案(1,2,3章)

微机原理作业参考答案第一次:P16 3,4,5,71.3 冯。

诺依曼计算机的结构特点是什么?答:参考P51.4 典型微机有哪三大总线?它们传送的是什么信息?答:有数据总线(DB,双向,传送数据),地址总线(AB,单向,传送CPU要访问的内存单元地址或IO端口的端口号),控制总线(CB,双向,传送总线控制信息)。

1.5 什么叫微处理器?什么叫微型计算机?什么叫微型计算机系统?三者有什么区别和联系?答:微型计算机系统可分为三个层次,即:微处理器,微型计算机和微型计算机系统。

微处理器即CPU,是一片主要包含运算器、控制器、寄存器组和总线访问逻辑电路的芯片;微型计算机是以微处理器为核心,配上存储器(ROM、RAM)、I/O接口电路及系统总线等所组成的计算机;以微型计算机为中心,配以相应的外围设备以及控制微型计算机工作的软件,就构成了完整的微型计算机系统。

1.7 试用示意图说明内存单元的地址和内存单元的内容,二者有何联系和区别?答:内存单元、内存单元的地址、内存单元的内容---这三个名词可类比为:房子、房子的地址、房子里住的人。

也就是说,内存单元是物理器件,8086CPU有二十根地址线,最多可访问1M(2^20)个内存单元。

内存单元按顺序被分配一个地址---第一个单元:0,第二个单元:1...最后一个单元:FFFFFH(或1048575D)。

每个内存单元可存储一个字节的数据。

图略,参考P7。

第二次作业:P54 1,2,3,6,7,9,11,132.1 8086从功能上分为哪两个部件?每个工作部件的功能、组成和特点分别是什么?答:分为执行部件(EU)和总线功能部件(BIU)两部分。

EU功能:执行算术/逻辑命令。

BIU功能:访问内存或I/O端口,从中读/写数据和读指令。

EU组成:ALU、EU控制器、寄存器组(通用、指针变址、标志)BIU组成:指令队列、总线控制逻辑、物理地址生成逻辑(地址加法器、段寄存器、IP)EU、BIU的特点和更详细的功能说明:参考P19。

西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)

西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)

西安电子科技大学微机原理上机要求及必做题目答案(汇编实现)西安电子科技大学微机原理上机必做题目及汇编程序答案1、编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。

编程要求与提示:[1]两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。

[2]和以压缩十进制数的形式存入SUM以下单元。

[3]将和送到屏幕显示部分功能的实现采用子程序的形式。

汇编语言实现如下:STACK SEGMENT STACKDB10H DUP(00)STACK ENDSDATA SEGMENTADD1DB12H,67H,85H,32HADD2DB21H,73H,65H,43HSUM DB4H DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,DATAMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,ADD1[3]LEA BX,ADD2[3]LEA DI,SUM[3]MOV CX,4CLCL1:MOV AL,[SI]ADC AL,[BX]DAAMOV[DI],ALDEC SIDEC BXDEC DILOOP L1CALL DISPAL;-------------------------------------EXITPROC:MOV AH,4CH;结束程序MOV AH,1INT21H;-------------------------------------DISPAL PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DILEA DI,SUMMOV CX,4DISPAL2:MOV AL,[DI]SHR AL,1SHR AL,1SHR AL,1SHR AL,1MOV AH,2MOV DL,ALADD DL,30HINT21HMOV AL,[DI]AND AL,0FHMOV AH,2MOV DL,ALADD DL,30HINT21HINC DILOOP DISPAL2POP DIPOP DXPOP CXPOP BXPOP AXRETDISPAL ENDPCODE ENDSEND START2、有一个首地址为A的N字数组,请编程序使该数组中的数按从大到小的次序排列。

微机原理作业与答案第三章

微机原理作业与答案第三章

8086第三章作业3-11在实模式下,若段寄存器中装入如下数值,试写出每个段的起始地址和结束地址(1)1000H 10000H-1FFFFH(2)1234H 12340H-2233FH(3)E000H E0000H-EFFFFH(4)AB00H AB000H-BAFFFH3-12对于下列CS:IP组合,计算出要执行的下条指令存储器地址。

(1)CS=1000H和IP=2000H 答:下条指令存储器地址:12000H(2)CS=2400H和IP=1A00H 答:下条指令存储器地址:25A00H(3)CS=1A00H和IP=B000H 答:下条指令存储器地址:25000H(4)CS=3456H和IP=ABCDH 答:下条指令存储器地址:3F12DH3-37 指出下列指令源操作数的寻址方式(1)MOV AX,1200H;立即数寻址(2)MOV BX,[1200H];直接寻址(3)MOV BX,[SI];变址寻址(4)MOV BX,[BX+SI+1200];相对基变址寻址(5)MOV [BX+SI],AL;寄存器寻址(6)ADD AX,[BX+DI+20H];相对基变址寻址(7)MUL BL ;寄存器寻址(8)JMP BX ;间接寻址(9)IN AL,DX ;寄存器间接寻址(10)INC WORD PTR[BP+50H] ;相对基址寻址小结:虽然对存储器的访问指令、输入/输出指令(IN指令和OUT指令)、跳转指令(JMP指令)都有直接寻址和间接寻址,但是形式是有很大差别的:1.直接寻址:(1)对于存储器的访问用方括号括起来的二进制数,如:MOV BX,[1200H](2)对于输入/输出指令(IN指令和OUT指令)用二进制数如:IN AX,8FH 又如: OUT 78H,AL(3)对于跳转指令(JMP指令)是以目标标号为直接地址的如: JMP ADDR12.间接寻址:(1)对于存储器的访问有分为基址寻址、变址寻址、基址加变址寻址以及带位移量的所谓相对基址寻址、相对变址寻址、相对基址加变址寻址如:MOV AX,[BP](2)对于输入/输出指令用DX做间接寻址寄存器如:IN AX,DX 又如: OUT DX,AL(3)跳转指令直接写明寄存器即可 (段内)如: JMP BX段间需组合:如: JMP DWORD PTR [BX+ADDR1]3-38指出8086/8088下列指令中存储器操作数地址的计数表达式。

西电机电院微机原理上机答案

西电机电院微机原理上机答案

西电机电院微机原理上机答案汇编语⾔上机题姓名:学号:成绩:实验⼀、上机过程及DEBUG应⽤编写程序,建⽴数据段DA TA,将你的姓名(汉语拼⾳)及学号存⼊DATA数据段的BUFFER1区域,然后利⽤程序将BUFFER1区域中的字符串(姓名及学号)依次传送到从BUFFER2开始的内存区域中去。

上机过程与要求1.建⽴原程序:源程序⽂件名为buffer.asm ,源程序清单如下:data segmentbuffer1 db 'hepan04105038'buffer2 db 13 dup(?)data endscode segmentASSUME CS:CODE,DS:DA TASTART:mov ax,datamov ds,axmov es,axlea si,buffer1lea di,buffer2mov cx,0dcldrep movsbmov ah,4chint 21hcode endsend start2.汇编后⽣成的obj⽂件名为buffer .OBJ3.连接后⽣成的⽬标⽂件名为buffer .EXE4.DEBUG调试:在DEBUG下,利⽤U、D、G、R等命令对EXE⽂件进⾏调试后,相关信息如下:(1)表1-1 反汇编清单中所反映的相关信息段地址偏移地址机器码助记符最后⼀条指令14B4 001E D1E3 SHL BX,1*注:最后⼀条指令是对应于代码段中最后⼀条指令(2)在未执⾏程序之前,⽤D命令显⽰内存区域BUFFER1及BUFFER2中的内容,其相关信息如表1-2所⽰。

表1-2 未执⾏程序之前的数据区内容变量区段地址值偏移地址变量值(或字符串)BUFFER1 14B2 0000 hepan04105038BUFFER2 14B2 000D ………….(3)执⾏程序以后⽤D命令显⽰内存区域的相关信息,如表1-3。

表1-3 执⾏程序之后的数据区内容变量区段地址值偏移地址变量值(字符串)BUFFER1 14B2 0000 hepan04105038BUFFER2 14B2 000D hepan04105038(4)⽤R命令检查寄存器的内容如表1-4所⽰。

微机原理第3章习题与答案

微机原理第3章习题与答案

习题一、选择题1.寻址方式指出了操作数的位置,一般来说_______。

A.立即寻址给出了操作数的地址B.寄存器直接寻址的操作数在寄存器内,而指令给出了存储器C.直接寻址直接给出了操作数本身D.寄存器直接寻址的操作数包含在寄存器内,由指令指定寄存器的名称答案:D2.寄存器寻址方式中,操作数在_________。

A.通用寄存器B.堆栈C.内存单元D.段寄存器答案:A3.寄存器间接寻址方式中,操作数在_________。

A.通用寄存器B.堆栈C.内存单元D.段寄存器答案:C4.下列指令中的非法指令是______。

A. MOV [SI+BX], AXB.MOV CL, 280C.MOV [0260H], 2346HD.MOV BX, [BX]答案:B5.设(SP)=0100H,(SS)=2000H,执行PUSH BP指令后,栈顶的物理地址是_____。

A.200FEHB.0102HC. 20102HD.00FEH答案:A6.指令LEA BX, TAB执行后,其结果是______。

A.将TAB中内容送BXB.将TAB的段基址送BXC.将TAB的偏移地址送BXD.将TAB所指单元的存储内容送BX答案:C7.下列正确的指令格式有______。

A.MOV [BX], 1B.MOV AL, 0345HC.MOV ES: PTR[CX], 3D. XLAT答案:D8.设(AX)=C544H,在执行指令ADD AH,AL之后,______。

A.CF=0,OF=0B.CF=0,OF=1C.CF=1,OF=0 D,CF=1,OF=1答案:C9.若AL、BL中是压缩BCD数,且在执行ADD AL, BL之后,(AL)=0CH,CF=1,AF=0。

再执行DAA后,(AL)=_____。

A.02HB.12HC.62HD.72H答案:B10.执行下列程序后AL的内容为_____。

MOV AL, 25HSUB AL, 71HDASA.B4HB.43HC.54HD.67H答案:C11.下列四条指令中,需要使用DX寄存器的指令是______。

微机原理作业及答案

微机原理作业及答案
PUSH AX PUSH DX MOV AX, BUF MOV DX, BUF+2 MOV CX, 32 LP: SHL AX, __ 1 ADC BX, 0
LP LOOP __
MOV BYTE PTR SRLT, ___ BL
POP DX ____ POP AX ___
RET XHZY ENDP
1 RCL DX,__
一、二、三、四章
作业
第一章 作业
1、简述微型计算机的硬件系统结构,并说明其主要功能。 2、试利用一个字节的字长,将十进制-115转换为相应的二 进制的原码、反码和补码。 [解]: (-115)原=(11110011)2 (-115)反=(10001100) (-115)补=(10001101) 3、已知[X]补=1100111,则[X]原= , [2X]补= ,并判断结果 是否溢出。 [解]:题目没有特殊说明,将最高为(第六位作为符号位) [X]反=[X]补-1=1100110,则[X]原=1011001 [2X]补=[X]补+ [X]补=1100111+1100111=1 1001110 C6· C5=1· 1=0,不溢出 另外,可以补齐第七位为0或者1,再进行计算获得。
第三章 作业
1、8086/8088操作数是从哪里来的?
答:来源有3种:立即数、寄存器、存储器操作数 指令中直接给出参加操作数; 参与操作的数存放在CPU的某个寄存器中; 参与操作的数存放在内存单元中,需要寻找相应的物理地址。 2、指出下列指令的错误 1)MOV AX, [SI][DI] 2) MOV [BX],[SI] 3) ADD BYTE, PTR[BX] (不能同时使用两个变址寄存器) (原操作数和目的操作数不能同时为存储器)
第三章 作业

西安电子科技大学微机原理大作业

西安电子科技大学微机原理大作业

西安电子科技大学微机原理大作业第一次上机一、实验目的1. 熟练掌握8086/8088的各种寻址方式及应用。

2.掌握DEBUG调试程序中的一些常用命令的使用方法,为以后的实验打下基础二、实验仪器586微机 1台三、实验内容1.关于数据的寻址方式练习8086/8088 提供多种方式实现操作数寻址,大体可分为7种:a. 立即寻址b. 寄存器寻址c. 直接寻址d. 寄存器间接寻址e. 寄存器相对寻址f. 基址变址寻址g. 基址变址且相对寻址掌握8086/8088的这些寻址方式,是学习汇编语言编程的关键。

指令SRC 寻址方式SRC的地址AX 推算值AX 实际值MOV AX, CX寄存器寻址0005 0005 MOV AX, 500H 立即寻址0500 0500 MOV AX, TABLE 直接寻址1541:0004 A5A 4 A5A 4MOV AX, ES:[BX] 寄存器间接寻址 1542:0004 C5C 4 C5C4MOV AX, [BX+05H] 寄存器相对寻址 1541:0009 AAA 9 AAA 9 MOV AX,寄存器相153FB8B B8B7 MOV AX, TABLE [BX] 寄存器相对寻址 1541:0008 A9A 8 A9A8MOV AX, 07H [BX] 寄存器相对寻址 1541:000B ACA B ACA BMOV AX, [BP]寄存器间接寻址 153F :0003 B4B 3 B4B 3 MOV AX, TABLE [BP] 寄存器相对寻址 1541:0007 A8A 7 A8A 7 MOV AX, 08H [BP] 寄存器相对寻址 153F :000B BCB B BCB B MOV AX, [BP+06H] 寄存器相对寻址 153F :0009 BAB 9 BAB 9 MOV AX,寄存器相1541A7A A7A6MOV AX, [BP]+05H 寄存器相对寻址153F:0008B9B8B9B8MOV AX, ES: [SI+03H] 寄存器相对寻址1542:0005C6C5C6C5MOV AX, [DI+06H] 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [DI]+05H 寄存器相对寻址1541:0006A7A6A7A6MOV AX, TABLE [SI] 寄存器相对寻址1541:0006A7A6A7A6MOV AX, [SI] 寄存器间接寻址1541:0002A3A2A3A2MOV AX, TABLE 寄存器相1541A6A A6A[DI] 对寻址:00055 5MOV AX, [SI]+05H 寄存器相对寻址1541:0007A8A7A8A7MOV AX, [BX] [DI+01H] 基址变址且相对寻址1541:0006A7A6A7A6MOV AX, [BX] [SI]+03H 基址变址且相对寻址1541:0009AAA9AAA9MOV AX, TABLE [BX] [SI] 基址变址且相对寻址1541:000AABAAABAAMOV AX, ES:[BX] [DI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [DI+02H] 基址变址且相对寻址153F:0006B7B6B7B6MOV AX, TABLE 基址变址1541A9A A9A[BP] [DI] 且相对寻址:00088 8MOV AX, ES:[BP] [SI] 基址变址寻址1542:0005C6C5C6C5MOV AX, [BP] [SI+05H] 基址变址且相对寻址153F:000ABBBABBBAMOV AX, 03H [BP] [DI] 基址变址且相对寻址153F:0007B8B7B8B7MOV AX, [BP] [SI] 基址变址寻址153F:0005B6B5B6B5MOV AX, [BP+02H] [DI+03H] 基址变址且相对寻址153F:0009BAB9BAB9MOV AX, TABLE [BP+02H][DI+03H] 基址变址且相对寻址1541:000DAEADAEAD第二次上机一、实验目的1. 熟练掌握汇编语言程序设计的方法及上机步骤。

微机原理第三章习题与参考答案

微机原理第三章习题与参考答案

第三章习题与参考答案3.1 已知 (DS) = 1000H,(ES) = 2000H,(SS) = 3000H,(SI) = 0050H,(BX) =0100H,(BP) =0200H,数据变量DISP的偏移地址为1000。

指出下列指令的寻址方式和物理地址。

(1) MOV AX,0ABH 立即寻址无(2) MOV AX,BX 寄存器寻址无(3) MOV AX,[l000H] 直接寻址 10000H(4) MOV AX,DATA 直接寻址 (DS*16+DATA )(5) MOV AX,[BX] 寄存器间接寻址 10100H(6) MOV AX,ES:[BX] 寄存器间接寻址 20100H(7) MOV AX,[BP] 寄存器间接寻址 30200H(8) MOV AX,[SI] 寄存器间接寻址 10050H(9) MOV Ax,[BX+l0] 寄存器相对寻址 1010AH(10) MOV AX,DISP[BX] 寄存器相对寻址 11100H(1l) MOV AX,[BX+SI] 基址变址寻址 10150H(12) MOV AX,DISP[BX][SI] 相对基址变址寻址 11150H3.2 分别说明下例指令采用的寻址方式和完成的操作功能。

(1) MOV CX,2000H 立即寻址将立即数2000H送CX寄存器(2) MOV DS,AX 寄存器寻址将AX寄存器内容送DS段寄存器(3) AND CH,[1000H] 直接寻址将[DS*16+1000H]单元的内容送CH寄存器(4) ADD [DI],BX 寄存器间接寻址将CL寄存器的内容送[DS*16+DI]单元(5) MOV SS:[3000H],CL 直接寻址将CL寄存器的内容送[SS*16+3000H]单元(6) SUB [BX][SI],1000H 直接寻址将立即数1000H送[DS*16+BX+SI+50H]单元(7) ADD AX,50H[BX][SI] 相对基址变址寻址将[DS*16+BX+SI+50H]单元的内容送AX寄存器(8) PUSH DS 寄存器寻址将DS寄存器的内容送[SS*16+SP]单元(9) CMP [BP][DI],AL 寄存器寻址将AL寄存器的内容送[SS*16+DI+BP]单元3.3 判断下列指令正误,如果错误请指出原因。

西电微机原理上机作业完整版

西电微机原理上机作业完整版

班级:021113 学号:02111283 :亚男指导老师:董玫上机作业(一)指令SRC寻址方式SRC的地址AX推算值AX实际值MOV AX, CX 寄存器寻址0005 0005 MOV AX, 500H 立即寻址0500 0500 MOV AX, TABLE 直接寻址1541:0004 A5A4 A5A4 MOV AX, ES:[BX] 寄存器间接寻址1542:0004 C5C4 C5C4 MOV AX, [BX+05H] 寄存器相对寻址1541:0009 AAA9 AAA9 MOV AX, SS:[BX]+03H 寄存器相对寻址153F:0007 B8B7 B8B7 MOV AX, TABLE [BX] 寄存器相对寻址1541:0008 A9A8 A9A8 MOV AX, 07H [BX] 寄存器相对寻址1541:000B ACAB ACAB MOV AX, [BP] 寄存器间接寻址153F:0003 B4B3 B4B3 MOV AX, TABLE [BP] 寄存器相对寻址1541:0007 A8A7 A8A7 MOV AX, 08H [BP] 寄存器相对寻址153F:000B BCBB BCBB MOV AX, [BP+06H] 寄存器相对寻址153F:0009 BAB9 BAB9 MOV AX, DS:[BP+03H] 寄存器相对寻址1541:0006 A7A6 A7A6 MOV AX, [BP]+05H 寄存器相对寻址153F:0008 B9B8 B9B8 MOV AX, ES: [SI+03H] 寄存器相对寻址1542:0005 C6C5 C6C5 MOV AX, [DI+06H] 寄存器相对寻址1541:0007 A8A7 A8A7 MOV AX, [DI]+05H 寄存器相对寻址1541:0006 A7A6 A7A6MOV AX, TABLE [SI] 寄存器相对寻址1541:0006 A7A6 A7A6MOV AX, [SI] 寄存器间接寻址1541:0002 A3A2 A3A2 MOV AX, TABLE [DI] 寄存器相对寻址1541:0005 A6A5 A6A5 MOV AX, [SI]+05H 寄存器相对寻址1541:0007 A8A7 A8A7 MOV AX, [BX] [DI+01H] 基址变址且相对寻址1541:0006 A7A6 A7A6 MOV AX, [BX] [SI]+03H 基址变址且相对寻址1541:0009 AAA9 AAA9 MOV AX, TABLE [BX] [SI] 基址变址且相对寻址1541:000A ABAA ABAA MOV AX, ES:[BX] [DI] 基址变址寻址1542:0005 C6C5 C6C5 MOV AX, [BP] [DI+02H] 基址变址且相对寻址153F:0006 B7B6 B7B6 MOV AX, TABLE [BP] [DI] 基址变址且相对寻址1541:0008 A9A8 A9A8 MOV AX, ES:[BP] [SI] 基址变址寻址1542:0005 C6C5 C6C5 MOV AX, [BP] [SI+05H] 基址变址且相对寻址153F:000A BBBA BBBA MOV AX, 03H [BP] [DI] 基址变址且相对寻址153F:0007 B8B7 B8B7 MOV AX, [BP] [SI] 基址变址寻址153F:0005 B6B5 B6B5 MOV AX, [BP+02H] [DI+03H] 基址变址且相对寻址153F:0009 BAB9 BAB9MOV AX, TABLE [BP+02H][DI+03H]基址变址且相对寻址1541:000D AEAD AEAD1.编写求十进制数12678532与21736543之和的程序,并将和以十进制数的形式送屏幕显示。

西电微机原理上机报告上机报告

西电微机原理上机报告上机报告

2、利用移位、传送和相加指令实现AX的内容扩大10倍。

(1)流程图如下,是简单的顺序结构。

(2)设最初AX=0001H,则理论最终结果应为AX=000AH。

结果截图如下:由图可见,AX=000AH,结果正确。

(3)调试过程的全部单步操作如下:(4)程序代码:DATAS SEGMENT DATAS ENDSSTACKS SEGMENT DW100H DUP(?)TOP LABEL WORD STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AX,0003HMOV BX,AXSHL AX,1SHL BX,1SHL BX,1SHL BX,1ADD AX,BXMOV AH,4CHINT21HCODES ENDSEND START3、在缓冲区VAR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果VAR中保存的为有符号数,再编写程序实现将其按递减关系排列。

(1)流程图如下。

第一个为无符号数的递增排列;第二个为有符号数的递减排列。

三个数字进行递增或者递减排列,最终结果仅有6种情况。

因此采用多重分支结构,对三个数字进行排列。

(2)将三个无符号数:2500、1000、4500进行递增排列,结果输出为:最终输出AX=03E8H=1000;BX=09C4H=2500;CX=1194H=4500。

结果正确。

将三个有符号数:-2500、-1000、-4500进行递减排列,结果输出为:最终输出AX=03E8H= -1000;BX=09C4H= -2500;CX=1194H= -4500。

结果正确。

(3)调试过程中的全部单步操作如下:(4)程序代码:<1>三个无符号数的递增排列:STACK SEGMENT STACKSTACK ENDSDATA SEGMENTVAR DW2500,1000,4500DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,VARCMP AX,VAR+2JBE S1JMP T1S1:CMP AX,VAR+4JAE S2MOV BX,VAR+2CMP BX,VAR+4JAE S3JMP S4T1:MOV AX,VAR+2CMP AX,VAR+4JAE T2MOV BX,VARJAE T3 JMP T4S2:MOV AX,VAR+4 MOV BX,VAR MOV CX,VAR+2 JMP FINS3:MOV AX,VAR MOV BX,VAR+4 MOV CX,VAR+2 JMP FINS4:MOV AX,VAR MOV BX,VAR+2 MOV CX,VAR+4 JMP FINT2:MOV AX,VAR+4 MOV BX,VAR+2 MOV CX,VAR JMP FINT3:MOV AX,VAR+2 MOV BX,VAR+4 MOV CX,VAR JMP FINT4:MOV AX,VAR+2MOV CX,VAR+4JMP FINFIN:MOV AH,4CHINT21HCODE ENDSEND START<2>三个有符号数的递减排序:STACK SEGMENT STACKSTACK ENDSDATA SEGMENTVAR DW-2500,-1000,-4500DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,VARCMP AX,VAR+2JGE S1JMP T1S1:CMP AX,VAR+4JLE S2MOV BX,VAR+2CMP BX,VAR+4JLE S3 JMP S4T1:MOV AX,VAR+2 CMP AX,VAR+4 JLE T2 MOV BX,VAR CMP BX,VAR+4 JLE T3 JMP T4S2:MOV AX,VAR+4 MOV BX,VAR MOV CX,VAR+2 JMP FINS3:MOV AX,VAR MOV BX,VAR+4 MOV CX,VAR+2 JMP FINS4:MOV AX,VAR MOV BX,VAR+2 MOV CX,VAR+4 JMP FINT2:MOV AX,VAR+4 MOV BX,VAR+2 MOV CX,VAR JMP FINT3:MOV AX,VAR+2MOV BX,VAR+4MOV CX,VARJMP FINT4:MOV AX,VAR+2MOV BX,VARMOV CX,VAR+4JMP FINFIN:MOV AH,4CHINT21HCODE ENDSEND START5、在变量VAR1和VAR2中分别保存有两个字节型的正整数,编写完整的汇编语言程序实现:(1)当两数中有一个奇数时,将奇数存入VAR1,偶数存入VAR2;(2)当两数均为奇数时,两个变量的内容不变;(3)当两数均为偶数时,两数缩小一半后存入原处。

西电微电子学院数字集成电路上机作业

西电微电子学院数字集成电路上机作业

《数字集成电路》上机实验姓名:***班级:***学号:***第一次实验一、实验目的:掌握HSPICES软件的使用方法,用于分析二极管及CMOS反相器的直流特性,通过改变电源电压及MOS管的宽长比得到一组CMOS反相器的电压传输特性曲线,从而理解CMOS反相器电压传输特性曲线的影响因素和调整方法。

二、实验内容:1. 由上图所示,令(1)I S=10-14A,T=300K;(2) I S=10-16A,T=300K;(3) I S=10-14A,T=350K,利用SPICE求解V D1、V D2和I D。

【仿真代码】.TITLE amplifierSHU.LIB 'D:\Digital\lib\csmc06.LIB' TT.TEMP temvalueR1 1 2 2kR2 3 4 2kD1 2 3 DMODD2 4 0 DMOD.MODEL DMOD D Is=isvalue.PARAM temvalue=27 isvalue=1E-14 V1 1 0 DC 2.5.OP.ALTER.PARAM temvalue=27 isvalue=1E-16 .ALTER.PARAM temvalue=77 isvalue=1E-14 .OPIONS LIST NODE POST=2.END【结果】【分析】V D1=525.4463mv、V D2=525.4463mv和I D=362.2768uA2. (1)由下图所示,令Vin从0V变化到2.5V,步长为0.5V,利用SPICE求M1管电流变化的曲线,判断管子的工作状态;当M1的尺寸变化为W/L=4u/1u时,求I M1,并解释两条曲线存在误差的原因。

【仿真代码】.TITLE amplifierSHU.LIB 'D:\Digital\lib\mix025_1.lib' TT.PARAM dd=2.5Vdd 1 0 DC ddVin 2 0 DCM_M1 0 2 1 1 pch L=1U W=4U.DC Vin 0 2.5 0.5.PRINT I(2).OP.OPTION NODE LIST POST.END.TITLE amplifierSHU.LIB 'D:\Digital\lib\mix025_1.lib' TT.PARAM dd=2.5Vdd 1 0 DC ddVin 2 0 DCM_M1 0 2 1 1 pch L=0.25U W=1U .DC Vin 0 2.5 0.5.PRINT I(2).OP.OPTION NODE LIST POST.END【结果】【分析】在1.5V之前是工作在线性区,1.5-2V之间是可变电阻区,2V以后工作在饱和区。

微机原理上机程序作业说明

微机原理上机程序作业说明

微机原理上机程序作业说明目录注意 (2)1.第一步:编辑汇编语言源程序 (2)2.第二步:汇编源程序(略写或不写,这里只是为了说明) (3)2.1 (3)2.2 (3)2.3 (3)3.第三步:连接目标程序 (4)4.第四步:调试(重点部分,需要记录) (5)4.1查看并记录代码段地址 (5)4.2查看并记录程序执行前寄存器的内容 (6)4.3 查看并记录程序执行后寄存器内容 (6)4.4查看并记录数据段内容 (7)附录 (8)64位系统汇编解决方法: (8)注意:作业最好还是手写,不用打印。

写的主要内容有:程序源代码(1),代码段地址(4.1),程序执行前寄存器内容(4.2),程序执行后寄存器内容(4.3)及数据段的内容(4.4)。

PS:自己写的难免有疏漏……1.第一步:编辑汇编语言源程序程序功能:m=2、n=3、w=4为三个8位无符号数,现欲求Q=m+n+w=9。

m、n、w存放在当前DS所决定的数据段、偏移地址为BUFFER的顺序单元中,结果Q放在AL中。

程序源代码:(可在旁边加注释解释说明)STACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDSDATA SEGMENTBUFFER DB 2,3,4DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXLEA SI,BUFFERMOV AL,[SI]MOV BL,[SI+1]ADD AL,BLMOV BL,0MOV BL,[SI+2]ADD AL,BLMOV AX,4C00HINT 21HCODE ENDSEND START以上程序保存为文件“zd.asm”。

2.第二步:汇编源程序(略写或不写,这里只是为了说明)中括号部分千万别抄[确保系统是32位(XP、WIN7均可;64位系统汇编会出现不兼容,汇编方法详见文档最后说明)2.1将群共享中的文件下载下来,MASM5文件夹放到D盘(以D盘为例,便于操作),将源程序“1.asm”放到MASM5文件夹下;2.2Windows键+R打开“运行”对话框,输入“cmd”并回车:2.3输入d:cd msam5切换到d:\masm5 文件夹下](中括号结束)产生.OBJ文件:输入“masm zd.asm”(直接回车的话用的是默认的文件名),若没有错误,产生zd.OBJ ;3.第三步:连接目标程序产生.EXE文件:输入“link zd.obj”(直接回车的话用的是默认的文件名),产生zd.EXE;4.第四步:调试(重点部分,需要记录)输入“debug zd.exe”(以下命令均指BEBUG的命令)。

微机原理三章作业

微机原理三章作业

7654h
Less Than
〔习题3.17〕 已知用于LED数码管的显示代码表为:
LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0c1h,86h,8eh
它依次表示0~9、A~F这16个数码的显示 代码。现编写一个程序实现将lednum中 的一个数字(0~9、A~F)转换成对应 的LED显示代码。
参考P71,例3-4 • 思考: 如果需要将更多的数据转换成其ASCII码显示 出来呢?(ex3-4-2.asm) hex db 04h,0bh,0fh,06h,0ah
参考 P75,例3-8 P75,例3-9
〔习题3.16〕编写一个程序,把从键盘输入的一个
小写字母用大写字母显示出来。
mov ah,1 ;输入小写字母 int 21h sub al,20h ;转换为大写字母 mov dl,al mov ah,2 int 21h ;显示
HTOASC
?两个ret
分两次调用htoasc子程序
push ax mov cl, 4 ror al, cl call HTOASC call disp_a_char pop ax call HTOASC call disp_a_char
?push和pop的作用
3.30
写一个子程序,根据入口参数AL=0、1、 2,依次实现对大写字母转换成小写、小写 转换成大写或大小写字母互换。欲转换的 字符串在string中,用0表示结束。 “abcd”(AL=0)
3.27:hw3-27.asm
编写一个源程序,在键盘上按一个键,将从 AL 返 回 的 ASCII 码 值 显 示 出 来 , 如 果 按 下 ESC键则程序退出。 可调用书中的HTOASC子程序。

西安电子科技大学微机原理课件第3章

西安电子科技大学微机原理课件第3章

2015-7-23
14
举例
MOV [SI+10H],AX MOV CX,[BX+COUNT] 如果(DS)=3000H,(SI)=2000H,(BX)=1000H, COUNT=1050H,(AX)=4050H,执行结果为: (32010H)=4050H,(CX)=4030H。
(DS)×10H=30000H (SI)=2000H + 10H 32010H 存储器 操作码 操作码 10 H (DS)×10H=30000H (BX)=1000H + COUNT=1050H 32050H 存储器 操作码 操作码 50 H 10 H 30000H AX 40 H 50H 32010H 32050H … CX 30000H … 30 H 40 H

29
2015-7-23
3.3.1 数据传送指令
通用数据传送指令; 地址传送指令; 累加器专用传送(输入/输出指令); 标志传送指令。

2015-7-23
30
1. 通用数据传送指令
传送指令MOV 数据交换指令XCHG 堆栈指令PUSH和POP
MOV AL,[1064H]
如果(DS)=2000H,执行结果为:(AL)=45H。
2015-7-23
10
直接寻址示意图
20000 H + 1064 H 21064 H 存储器 操作码 64 H 10 H AL 20000H … 21064H … 数据段 45 H 代码段
2015-7-23
11
4. 寄存器间接寻址
2015-7-23
21
举例(续)
(1) EA=0710H 物理地址=32000H+0710H=32710H (2) 寄存器间接寻址(假设寄存器为BP) EA=2200H 物理地址=50000H+2200H=52200H (3) 寄存器相对寻址(假设寄存器为BX) EA=1200H+0710H=1910H 物理地址=32000H+1910H=33910H (4) 基址变址寻址(假设寄存器为BP和SI): EA=2200H+0A00H=2C00H 物理地址=50000H+2C00H=52C00H (5) 基址变址且相对寻址(假设寄存器为BX和SI) EA=1200H+0A00H+0710H=2310H 物理地址=32000H+2310H=34310H
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机上机作业三容:编写如下程序,并在机器上调试成功。

程序采用菜单式选择,可以接收用户从键盘输入的五个命令(1-5),各命令功能分别为:(1)按下“1”键,完成字符串小写字母变成大写字母。

(2)按下“2”键,完成找最大值(二选一)。

(3)按下“3”键,完成排序(二选一)。

(4)按下“4”键,显示时间。

(5)按下“5”键,结束程序运行,返回系统提示符。

汇编程序:STACK SEGMENT STACKDB 256 DUP(?)TOP LABEL WORDSTACK ENDSDATA SEGMENTTABLE DW G1, G2, G3, G4, G5STRING0 DB' Form the school ID is 02111460 Li Cheng',0DH,0AH,'$'STRING1 DB '1. Change small letters into capital letters of string;', 0DH, 0AH, '$'STRING2 DB '2. Find the maximum of string;', 0DH, 0AH, '$'STRING3 DB '3. Sort for datas;', 0DH, 0AH, '$'STRING4 DB '4. Show Time;', 0DH, 0AH, '$'STRING5 DB '5. Exit.', 0DH, 0AH, '$'STRINGN DB 'Input the number you select (1-5) : $'IN_STR DB 'Input the string (including letters & numbers, less than 60 letters) :', 0DH, 0AH, '$' PRESTR DB 'Original string : $'NEWSTR DB 'New string : $'OUT_STR DB 'The string is $'MAXCHR DB 'The maximum is $'IN_NUM DB 'Input the numbers (0 - 255, no more than 20 numbers) : ', 0DH, 0AH, '$'OUT_NUM DB 'Sorted numbers : ', 0DH, 0AH, '$'IN_TIM DB 'Correct the time (HH:MM:SS) : $'HINTSTR DB 'Press ESC, go back to the menu; or press any key to play again!$'KEYBUF DB 61DB ?DB 61 DUP (?)NUMBUF DB ?DB 20 DUP (?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK START:MOV AX, DATAMOV DS, AXMOV AX, STACKMOV SS, AXMOV SP, OFFSET TOPMAIN: CALL FAR PTR MENU ; 设置显示器AGAIN:MOV AH, 2MOV BH, 0 ; 页号MOV DL, 41 ; 列号MOV DH, 10 ; 行号INT 10H ; 光标位置设置MOV AH, 1INT 21HCMP AL, '1'JB AGAINCMP AL, '5'JA AGAINSUB AL, '1' ; N-1SHL AL, 1 ; (N-1)*2CBW ; AL->AXLEA BX, TABLEADD BX, AXJMP WORD PTR [BX]G1:CALL FAR PTR CHGLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G1G2:CALL FAR PTR MAXLTRMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G2G3:CALL FAR PTR SORTNUMMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G3G4:CALL FAR PTR TIMCHKMOV AH, 8INT 21HCMP AL, 1BHJZ MAINJMP G4G5:MOV AH, 4CHINT 21HMENU PROC FAR ; 显示主界面;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING0INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING1INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING2INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING3INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING4INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 10 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRING5INT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 11 ; 行号INT 10H ; 光标位置设置MOV AH, 9LEA DX, STRINGNINT 21HRETMENU ENDPCHGLTR PROC FAR ; 将输入字符串中小写字母便换成大写字母RECHG:;设置显示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOV AH, 9LEA DX, IN_STRINT 21H ; 输入字符串提示MOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入字符串CMP KEYBUF + 1, 0JZ RECHG ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOV AL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR [BX], '$' ; 在输入字符串尾加结束标志$MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOV AH, 9LEA DX, PRESTRINT 21H ; 输出源字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H ; 输出源字符串LEA BX, KEYBUF + 2LCHG:CMP BYTE PTR [BX], 61HJB NOCHGAND BYTE PTR [BX], 0DFHNOCHG:INC BXLOOP LCHG ; 将字符串中小写字母转换成大写字母MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOV AH, 9LEA DX, NEWSTRINT 21H ; 输出新字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H ; 输出新字符串MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETCHGLTR ENDPMAXLTR PROC FAR ; 在输入字符串中找出最大值REMAX:;设置显示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOV AH, 9LEA DX, IN_STRINT 21H ; 输入字符串提示MOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入字符串光标位置设置MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入字符串CMP KEYBUF + 1, 0JZ REMAX ; 判断输入字符串是否为空串LEA BX, KEYBUF + 2MOV AL, KEYBUF + 1CBWMOV CX, AXADD BX, AXMOV BYTE PTR [BX], '$' ; 在输入字符串位加结束标志$ MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 源字符串提示光标位置设置MOV AH, 9LEA DX, OUT_STRINT 21H ; 输出字符串提示MOV AH, 9LEA DX, KEYBUF + 2INT 21H ; 输出字符串MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 新字符串提示光标位置设置MOV AH, 9LEA DX, MAXCHRINT 21H ; 输出字符串中最大值提示MOV DL, 0LEA BX, KEYBUF + 2LCMP:CMP [BX], DLJB NOLCHGMOV DL, [BX]NOLCHG:INC BXLOOP LCMP ; 找出字符串中最大字符,放入DL MOV AH, 2INT 21H ; 输出字符串中最大字符MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETMAXLTR ENDPSORTNUM P ROC FAR ; 对输入数据组排序RESORT:;设置显示器方式MOV AH, 0MOV AL, 3MOV BL, 0INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 5 ; 行号INT 10H ; 输入提示光标位置设置MOV AH, 9LEA DX, IN_NUMINT 21HMOV AH, 2MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 输入数据组光标位置设置MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入数据组字符串CALL CIN_INT ; 字符串转换成数据串CMP AL, 0JZ RESORT ; 判断数据串是否有错CMP NUMBUF, 0JZ RESORT ; 判断数据串是否为空MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 7 ; 行号INT 10H ; 输出提示光标位置设置MOV AH, 9LEA DX, OUT_NUMINT 21H ; 输出数据串提示MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 8 ; 行号INT 10H ; 输出数据组光标位置设置CALL FAR PTR MPSORT ; 数据组排序CALL FAR PTR INT_OUT ; 数据组的输出MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息RETSORTNUM E NDPCIN_INT PROC NEAR ; 读入整型数; 入口参数:无; 出口参数为:AL(有无错误标志,0为有,1为无)MOV CL, KEYBUF + 1LEA SI, KEYBUF + 2MOV CH, 0 ; 数据组数据个数置0MOV DH, 10MOV AL, 0 ; 当前数据x=0MOV DL, 0 ; 有无数据标志置0,即无数据FNDNUM:CMP BYTE PTR [SI], ' 'JZ ADDNUM ; 判断当前字符是否为空格CMP BYTE PTR [SI], '0'JB ERRNUMCMP BYTE PTR [SI], '9'JA ERRNUM ; 判断当前字符是否在'0'-'9'之间MOV DL, 1 ; 有无数据标志置1,即有数据MUL DHXOR BH, BHMOV BL, [SI]ADD AX, BXSUB AX, '0' ; 计算出当前数据xCMP AH, 0JA ERRNUM ; 判断x是否越界JMP NEXTADDNUM:CMP DL, 1JNZ NEXT ; 判断是否有数据INC CH ; 数据组数据个数加1CALL ADDNEWMOV DL, 0MOV AL, 0 ; 清零NEXT:INC SIDEC CLCMP CL, 0JNZ FNDNUM ; 依次检查各字符C MP DL, 1JNZ TOTAL ; 判断是否有未加入的数据INC CHCALL ADDNEWTOTAL:MOV NUMBUF, CH ; 置数据组数据个数MOV AL, 1 ; 输入数据无错误JMP CRTNUMERRNUM:MOV AL, 0 ; 输入数据有错误CRTNUM:RETCIN_INT ENDPADDNEW PROC NEAR ; 增加新数; 入口参数:CH(数据组数据个数)、AL(当前数据x); 出口参数:无PUSH AXLEA BX, NUMBUFMOV AL, CHCBWADD BX, AXPOP AXMOV [BX], ALRETADDNEW ENDPMPSORT PROC FAR ; 数据组排序MOV AL, NUMBUFCMP AL, 1JBE NOSORT ; 若只有一个元素,停止排序CBWMOV CX, AXLEA SI, NUMBUF ; SI指向数据组首地址ADD SI, CX ; SI指向数据组末地址DEC CX ; 外循环次数LP1: ; 外循环开始PUSH CXPUSH SIMOV DL, 0 ; 交换标志置0LP2: ; 循环开始MOV AL, [SI]CMP AL, [SI - 1]JAE NOXCHGXCHG AL, [SI - 1] ; 交换操作MOV [SI], ALMOV DL, 1 ; 交换标志置1NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL, 1JNZ NOSORT ; 判断交换标志LOOP LP1NOSORT:RETMPSORT ENDPINT_OUT PROC FAR ; 输出数据组MOV AL, NUMBUFCBWMOV CX, AXMOV BL, 10HLEA SI, NUMBUF + 1PRINT:MOV AL, [SI]CALL OUTNUMINC SIMOV AH, 2MOV DL, ' 'INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUM PROC NEAR ; 将十进制数以十六进制输出; 入口参数:AL(待转换的数据),BL(转换进制数16); 出口参数:无MOV AH, 0DIV BLPUSH AXCMP AH, 10JB PNUMADD AH, 7PNUM: ADD AH, 30HMOV DL, AHPOP AXPUSH DXCMP AL, 0JZ OUTNCALL OUTNUMOUTN:POP DXMOV AH, 2INT 21HRETOUTNUM ENDPTIMCHK PROC FAR ; 设定并显示时间;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 5 ; 列号MOV DH, 6 ; 行号INT 10H ; 设置提示光标位置设置MOV AH, 9LEA DX, IN_TIMINT 21H ; 时间串提示MOV AH, 0AHLEA DX, KEYBUFINT 21H ; 输入时间串MOV BL, 10MOV AL, KEYBUF + 2SUB AL, '0'MUL BLADD AL, KEYBUF + 3SUB AL, '0'CMP AL, 0JB INVALIDCMP AL, 24JAE INVALID ; 判断时有效性MOV CH, ALMOV AL, KEYBUF + 5SUB AL, '0'MUL BLADD AL, KEYBUF + 6SUB AL, '0'CMP AL, 0JB INVALIDCMP AL, 60JAE INVALID ; 判断分有效性MOV CL, ALMOV AL, KEYBUF + 8SUB AL, '0'MUL BLADD AL, KEYBUF + 9SUB AL, '0'CMP AL, 0JB INVALIDCMP AL, 60JAE INVALID ; 判断秒有效性MOV DH, ALMOV DL, 0MOV AH, 2DHINT 21H ; 置系统时间INVALID:CALL TIMERETTIMCHK ENDPTIME PROC ; 显示时间子程序;设置显示器方式MOV AH, 0MOV AL, 3;MOV BL, 0;INT 10H ; 清屏MOV AH, 2MOV BH, 0 ; 页号MOV DL, 10 ; 列号MOV DH, 9 ; 行号INT 10H ; 提示信息光标位置设置MOV AH, 9LEA DX, HINTSTRINT 21H ; 输出提示信息DISP1:MOV AH, 2MOV BH, 0 ; 页号MOV DL, 72 ; 列号MOV DH, 0 ; 行号INT 10H ; 提示光标位置设置MOV AH, 2CH ; 取系统时间,CH,CL,DH分别存放时/分/秒INT 21HMOV AL, CH ; 显示时CALL SHOWNUMMOV AH, 2MOV DL, ':'INT 21HMOV AL, CL ; 显示分CALL SHOWNUMMOV AH, 2MOV DL, ':'INT 21HMOV AL, DH ; 显示: 秒CALL SHOWNUMMOV AH,02H ; 设置光标位置MOV DX,090AHMOV BH,0INT 10HMOV BX,0018HRE: MOV CX,0FFFFH ; 延时REA: LOOP READEC BXJNZ REMOV AH, 0BH ; 或MOV AH, 01HINT 21H ; INT 16HCMP AL, 0 ; JE DISP1JZ DISP1 ; 检查键盘状态RETTIME ENDPSHOWNUM PROC ; 把AL中的数字以十进制输出; 入口参数:AL(待显示的数据); 出口参数:无CBWPUSH CXPUSH DXMOV CL, 10DIV CLADD AH, '0'MOV BH, AHADD AL, '0'MOV AH, 2MOV DL, ALINT 21HMOV DL, BHINT 21HPOP DXPOP CXRETSHOWNUM ENDPCODE ENDSEND START主界面:(1):(2)(3)(4)(5)心得体会这次微机上机实验让我更加深刻的了解了汇编程序在DOC系统中的应用,更加熟悉了中断的各种操作与应用,对课本上的知识也有了更加深的理解,对一些程序也有了更深的了解。

相关文档
最新文档