实验一两个多位十进制数相减实验一、实验要求:将两个多位十进制数相减,要求被减数,减数均以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 。