当前位置:文档之家› 微机原理实验程序

微机原理实验程序

实验一两个多位十进制数相减实验一、实验要求:将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前>,结果送回DATAI处。

二、实验目的:1.学习数据传送和算术运算指令的用法。

2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。

三、实验步骤:连好实验箱后接通电源,打开上位机软件88TE进入软件调试界面:点击“文件\打开”文件路径为C:\88TE\cai\asm\Ruanjian\Rjexp1.asm。

具体操作如图所示:b5E2RGbCAP点击编译连接生成可执行的exe文件。

通过单步运行调试程序,打开寄存器查看其变量变化情况。

四、实验程序框图:五、实验程序:文件路径为C:\88TE\cai\asm\Ruanjian\Rjexp1.asmDATA SEGMENTDATA1 DB 33H,39H,31H,37H,38H 。

第一个数据<作为被减数)DATA2 DB 36H,35H,30H,38H,32H 。

第二个数据<作为减数)MES1 DB '-','$'MES2 DB '=','$'p1EanqFDPw Array DATA ENDSSTACK SEGMENTSTA DB 20 DUP(?>TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV SI,OFFSET DATA1MOV BX,05CALL DISPLMOV AH,09HLEA DX,MES1INT 21HMOV SI,OFFSET DATA2MOV BX,05CALL DISPLMOV AH,09HLEA DX,MES2INT 21HMOV SI,OFFSET DATA1MOV DI,OFFSET DATA2CALL SUBA 。

减法运算MOV SI,OFFSET DATA1MOV BX,05 。

显示结果CALL DISPLMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HINT 21HMOV AX,4C00HINT 21HDISPL PROC NEAR 。

显示子功能DSI: MOV AH,02MOV DL,[SI+BX-1] 。

显示字符串中一字符INT 21HDEC BX 。

修改偏移量JNZ DSIRETDISPL ENDPSUBA PROC NEARMOV DX,SIMOV BP,DIMOV BX,05SU1: SUB BYTE PTR[SI+BX-1],30HSUB BYTE PTR[DI+BX-1],30HDEC BX 。

将ASCII 码表示的数字串DXDiTa9E3dJNZ SU1 。

转化为十六进制的数字串 MOV SI,DXMOV DI,BPMOV CX,05 。

包括进位,共5位CLC 。

清进单位SU2: MOV AL,[SI]MOV BL,[DI]SBB AL,BL 。

带进位相减AAS 。

非组合BCD码的减法调整 MOV [SI],AL 。

结果送被减数区INC SIINC DI 。

指向下一位LOOP SU2 。

循环MOV SI,DXMOV DI,BPMOV BX,05SU3: ADD BYTE PTR [SI+BX-1],30HADD BYTE PTR [DI+BX-1],30HDEC BX 。

十六进制的数字串转化ASCII码表示的数字串 JNZ SU3RETSUBA ENDPCODE ENDSEND START实验二两个数相乘的实验一、实验要求:实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,算式结果在屏幕上显示出来。

二、实验目的:掌握乘法指令和循环指令的用法。

三、实验程序框图:四、实验程序:DATA SEGMENTDATA1 DB 32H,39H,30H,35H,34HDATA2 DB 34HMES1 DB '*','$'MES2 DB '=','$'RESULT DB 6 DUP (00H>DATA ENDSSTACK SEGMENTSTA DB 20 DUP (?>TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,TOPLEA SI,DATA1MOV BX,05HL1: MOV AH,02HMOV DL,[SI+BX-1]INT 21HDEC BXJNZ L1MOV AH,09HLEA DX,MES1INT 21HLEA SI,DATA2MOV AH,02HMOV DL,[SI]INT 21HMOV AH,09HLEA DX,MES2INT 21HMOV SI,OFFSET DATA2 。

显示算式MOV BL,[SI] 。

乘数DATA2→BLAND BL,00001111B 。

屏蔽高4位,ASCII码转化为十六进制数MOV SI,OFFSET DATA1MOV DI,OFFSET RESULTMOV CX,05LOOP1: MOV AL,[SI]AND AL,00001111B 。

取被乘数DATA1,ASCII变十六进制数INC SI 。

指向被乘数1的下一字符单元MUL BL 。

相乘AAM 。

AAM调整ADD AL,[DI] 。

结果低位与前次计算的进位相加AAA 。

AAA调整MOV [DI],ALINC DI 。

结果送存到下一单元MOV [DI],AHLOOP LOOP1 。

计算结果高位进位送存MOV CX,06MOV SI,DIDISPL: MOV AH,02MOV DL,[SI]ADD DL,30HINT 21HDEC SILOOP DISPL 。

显示结果MOV AX,4C00HINT 21H 。

结束CODE E NDSEND START实验三 BCD码相乘实验一、实验要求:实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式存放,各占一个内存单元,乘积存入在另外两个内存单元中,由于没有组合的BCD码乘法指令,程序中采用将乘数1作为计算器,累加另一个乘数的方法得到计算结果。

RTCrpUDGiT二、实验目的:掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。

三、实验程序框图:<附后)四、实验程序:DATA SEGMENTFIRST DB 99HSECOND DB 25HTHIRD DB 2 DUP(?>MES1 DB '*','$'MES2 DB '=','$'DATA ENDSSTACK S EGMENT PARA STACK 'STACK'STAPN D B 100 DUP(?>TOP EQU LENGTH STAPNSTACK E NDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV BL,FIRST 。

被乘数送BLMOV CL,SECOND 。

乘数送CLMOV DX,0 。

部分积清0MOV AL,BLAGAIN: OR AL,ALJZ DONE 。

被乘数减到0则转结果显示 MOV AL,DLADD AL,CLDAA 。

乘数于部分积低位相加后调整 MOV DL,ALMOV AL,DHADC AL,0DAA 。

往部分积高位送进位后调整MOV DH,ALMOV AL,BLDEC ALDAS 。

组合BCD码减法调整MOV BL,ALJMP AGAINDONE: L EA BX,THIRDMOV [BX],DXLEA SI,FIRSTCALL DISXOR AX,AXMOV AH,09HLEA DX,MES1 。

*INT 21HLEA SI,SECONDCALL DISXOR AX,AXLEA DX,MES2 。

=MOV AH,09HINT 21HLEA SI,THIRDINC SICALL DISDEC SICALL DISMOV AX,4C00H 。

返回DOSINT 21HDIS PROC NEAR 。

显示子程序MOV AL,[SI]MOV CL,04HSHR AL,CLADD AL,30HMOV DL,ALMOV AH,02HINT 21HMOV AL,[SI]AND AL,0FHADD AL,30HMOV DL,ALMOV AH,02HINT 21HRETDIS ENDPCODE ENDSEND START实验四字符匹配程序一、实验要求:用串操作指令设计程序,实现在指定存储区6000:0-6000:100<长度为100H)中寻找匹配字符,遇空格字符<20H)结束,退出时给出是否找到的信息。

5PCzVD7HxA二、实验目的:掌握8086的串操作指令的使用方法。

三、实验说明:1、8086中用于字符串检索的指令为SCAXB/SCASW,用AL中的字节或者AX中的字与位于ES段由DI寄存器所批的内存单元的字节或字相比较。

通过前缀的控制,可以实现在DI所指的字母串中,寻找第一个与AL<或AX)的内容相同<或不同)的字节<或字)。

jLBHrnAILg2、对于所有的串操作指令,都要注意方向标志的设置,指令CLD使方向标志DF 清0,SI和DI自动增量修改,指令STD使DF置I,SI和DI作自动减量修改。

xHAQX74J0X四、实验程序框图:五、实验程序:DATA SEGMENTMESS1 DB '按下回车后在6000:0-100范围内寻找空格符!',0DH,0AH,'$'LDAYtRyKfEMESS3 DB '找到空格符!',0DH,0AH,'$'MESS4 DB '寻找范围内没有空格符!',0DH,0AH,'$'DATA ENDSSTACK SEGMENTSTA DW 32 DUP(?>TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AX 。

相关主题