微机原理与接口技术实验报告-全实例代码
微机原理及接口技术实验报告

《微机原理与接口技术》实验报告姓名:学号:班级:专业:电气工程及其自动化学院:电气与信息工程学院目录实验一数据传送 (2)实验二算术运算 (4)实验三代码转换 (6)实验四程序的基本结构 (9)1、分支程序 (9)2、循环程序 (13)3、子程序 (16)实验五中断实验(8259) (19)实验六并行接口实验(8255) (25)实验七定时器/计数器实验(8235) (31)实验八D/A接口实验 (36)实验九A/D接口实验 (40)实验十串行通信实验 (43)实验一数据传送一、实验目的1. 掌握与数据有关的不同寻址方式。
2. 继续熟悉实验操作软件的环境及使用方法。
二、实验设备PC微机一台、TD-PIT + 或TD-PIT ++ 实验系统一套。
三、实验内容本实验要求将数据段中的一个字符串传送到附加段中,并输出附加段中的目标字符串到屏幕上。
四、实验步骤(1) 运行Tdpit 集成操作软件,编写实验程序。
(2) 编译连接无误后,进入调试环境,进行程序的调试。
按F8 键单步运行程序,执行完MOV DS,AX 语句后,观察DS 寄存器中出现的段地址。
如图1-1所示可以看出DS数据段中MSR源数据串"HELLO,WORLD!$"。
图1-1 进入调试环境(3)继续单步运行程序,执行MOV ES,AX 语句后,可以看数据段出现的段地址,用同样的方法可以查看ES:0000 的数据。
数据传输还没开始进行,此时ES 段的数据为空,如图1-1所示。
继续单步运行程序如图1-2可以看出数据正在逐渐的进入ES段中。
图1-2 DS源数据段数据(4)直到数据传输完毕,可以看到ES 数据段中目的数据串MSD 已经被写入了数据串"HELLO,WORLD!$"。
如图1-3所示。
图1-3 根据ES值查看附加段的数据实验二算术运算一、实验目的1. 掌握运算类指令编程及调试方法。
2. 掌握运算类指令对各状态标志位的影响及测试方法。
微机原理及接口技术实验报告

微机原理及接口技术实验报告实验一实验日期实验时间1 实验名称:系统认知实验2 实验目的:了解汇编语言的设计、编写和调试程序的方法,掌握DEBUG的使用。
3 实验内容/原理:编程实现字符串“Hello World!”,用DEBUG调试程序。
实验要求:1、上机前做好充分准备,包括源程序清单、调试步骤等;2、用DEBUG来调试程序,熟悉DEBUG的使用。
实验步骤:1、编写程序并输入,检查无误后,经汇编、连接后运行,用DEBUG装入。
2、用U命令反汇编程序,应用R、G等命令,观看运行情况。
3、用D、E、A等命令查看、修改源数据,用G命令查看运行结果。
4、用Q命令退出DEBUG。
4 调试过程及结果DSEG SEGMENTSTRING DB 'HELLO,World!',0DH,0AH,'$'DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXLEA DX,STRINGMOV AH,09HINT 21HMOV AH,4CHINT 21HCSEG ENDSEND START实验显示结果:-u13CB:0100 7403 JZ 010513CB:0102 E99700 JMP 019C13CB:0105 B80500 MOV AX,000513CB:0108 50 PUSH AX13CB:0109 FF363C21 PUSH [213C]13CB:010D FF363A21 PUSH [213A]13CB:0111 E84C14 CALL 156013CB:0114 83C406 ADD SP,+0613CB:0117 8946F8 MOV [BP-08],AX13CB:011A 895634 MOV [BP+34],DX13CB:011D 00BA130B ADD [BP+SI+0B13],BH-d13CB:0100 74 03 E9 97 00 B8 05 00-50 FF 36 3C 21 FF 36 3A t.......P.6<!.6:13CB:0110 21 E8 4C 14 83 C4 06 89-46 F8 89 56 34 00 BA 13 !.L.....F..V4...13CB:0120 0B 06 BA 17 75 1C 83 7E-0A FF 74 08 8B 46 06 0B ....u..~..t..F..13CB:0130 46 08 75 0E A1 3A 21 8B-16 3C 21 A3 B8 17 89 16 F.u..:!..<!.....13CB:0140 BA 17 C4 5E F8 2B C0 26-89 47 10 26 89 47 0E 8B ...^.+.&.G.&.G..13CB:0150 46 06 8B 56 08 26 89 47-0A 26 89 57 0C 8A 46 0A F..V.&.G.&.W..F.13CB:0160 26 88 47 22 8A 46 0C 26-88 47 05 A1 32 21 8B 16 &.G".F.&.G..2!..13CB:0170 34 21 89 46 FC 89 56 FE-A1 5E 27 8B 16 60 27 A3 4!.F..V..^'..`'.-tAX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13CB ES=13CB SS=13CB CS=13CB IP=0102 NV UP EI PL NZ NA PO NC 13CB:0102 E99700 JMP 019C-rAX=6789 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=13CB ES=13CB SS=13CB CS=13CB IP=0102 NV UP EI PL NZ NA PO NC 13CB:0102 E99700 JMP 019C实验二实验日期实验时间1 实验名称:系统认知实验2 实验目的:了解汇编语言的设计、编写和调试程序的方法,掌握DEBUG的使用。
微机原理与接口技术软件实验报告

第一篇软件实验实验一存储器块操作实验一、实验目的1. 熟悉KEIL集成调试环境和汇编程序的调试方法。
2. 掌握存储器读写方法;3. 了解内存块的移动方法;二、实验说明实验1 指定某存储器的其实地址和长度,要求能将其内容赋值。
通过该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。
块移动是单片机常用操作之一,多用于大量的数据复制和图像操作。
例程2给出起始地址,用地址加1方法移动块,将指定源地址和长度的存储块移到指定目标为起始地址的单元中去。
移动3000H起始的256个字节到4000H起始的256个字节。
三、实验内容1. 试编程将片内RAM中的数据依次复制到片外RAM。
假设源数据区的首地址为40H,目的数据区的首地址为1000H,数据块长度为10H。
流程图:程序:运行结果:Memory显示,片内RAM中40H开始数据为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明测试数据已经成功输入片内RAM。
从片外RAM中1000H位置开始记录为03 00 29 00 00 00 71 00 AB 00 00 00 1E 00 00 FF,说明片内RAM从40H开始的数据已经成功复制到片外从1000H开始的地址。
2. 两个16位无符号二进制数分别存放在片外RAM首址为2000H和2002H单元内,将它们相加,结果存入RAM 30H(低8位)、31H(高8位)。
程序(以0506H+CDEFH为例):0506H和CDEFH已存入片外单元,运算结果D2F5已存入30H和31H中。
四、思考题1. 如何将存储块的内容置成某固定值(例全填充为0FFH)?请用户修改程序,完成此操作。
答:将源程序中的MOV A, #01H 改为MOV A,#0FFH即可。
2. 若源块地址和目标地址有重叠,该如何避免?答:先执行一次数据转移操作将源块地址中的数据先暂存入一块地址与目标地址和源块地址均不重叠的存储区,再执行一次数据转移操作将暂存区的数据移入目标地址区域。
微机原理与接口技术实验报告一

微机原理与接口技术实验报告(一)实验内容一:1、实验目的: 考察对内存寻址方式、8086指令的理解内存中的数据排列如上表所示,各寄存器内容如下DS=2100H ES=2111H SS=2000H BX=106H CX=3H SI=106H DI=12H BP=1100H SP=1100HFR=3402H (FR 标志寄存器,FR 中的DF -字符串操作方向位为1)在执行下列指令后,写出寄存器AX中的内容 0) pop ax; AX= 1) mov ax,bx; AX= 2) mov ax,[bx];AX= 3) mov ax,102H;AX= 4) mov ax,[102H];AX= 5) mov ax,6[SI];AX= 6) lea ax,6[BX][DI];AX= 7) mov ax,[BP+DI];AX= 8) rep lodsw;AX= , 还需写出SI=2、实验内容: (1)开始菜单下选择运行,输入cmd 回车,在开启的窗口中输入debug 后回车,进入程序输入环境(2)利用r 指令显示当前各寄存器储值并按照上文中的寄存器值进行修改 结果如下:物理地址 内容(字节) 物理地址 内容(字节)21100H BEH 21110H 99H 21101H 02H 21111H 00H 21102H 01H 21112H E8H 21103H 8BH 21113H 7EH 21104H 44H 21114H E0H 21105H 02H 21115H 74H 21106H 29H 21116H 06H 21107H 44H 21117H E8H 21108H 04H 21118H 17H 21109H 9CH 21119H 01H 2110AH 50H 2111AH ACH 2110BH E6H 2111BH EBH 2110CH 99H 2111CH 34H 2110DH C6H 2111DH 00H 2110EH 06H 2111EH 30H 2110FHE8H2111FH0BH(3)d指令查看21100H——2111FH内存单元的内容(4)e指令对该段内存单元进行赋值(5)a指令按顺序输入要求中列出的指令(6)u指令进行反汇编(7)t指令(跟踪命令)逐条运行指令,观察记录指令运行结果3、实验结果0) pop ax; AX=02be1) mov ax,bx; AX=01062) mov ax,[bx];AX=44293) mov ax,102H;AX=01024) mov ax,[102H];AX=8b015) mov ax,6[SI];AX=c6996) lea ax,6[BX][DI];AX=011e7) mov ax,[BP+DI];AX=7ee88) rep lodsw;AX=4429, SI=0108实验内容二:1、实验目的:熟悉masm for windows 软件的应用,体会汇编程序的编写、编译、执行及调试等各个环节。
微型计算机原理及接口技术实验报告

成都理工大学微型计算机原理及接口技术实验报告学院: 核技术与自动化工程学院专业: 电气工程及其自动化班级:学号:姓名:指导老师:完成时间:实验一EMU 8086软件的使用1、实验目的通过对emu8086的使用,来理解《微型计算机原理及接口技术》课本上的理论知识,加深对知识的运用,以及emu8086交互式学习汇编语言(Assembly Language)、计算机结构(Computer Architecture)和逆向工程(Reverse Engineering)的完整仿真体系。
以及了解创建,编译,链接,调试运行,拟屏幕、源代码观察、复位、辅助工具、变量、DEBUG、堆栈及FLAGS(标志寄存器)观察等功能。
2、实验环境及设备实验中用到的硬件:记本电脑。
软件:emu8086编程程序emu8086.exe。
3、实验内容1.emu8086的编辑面板:其中编程时要做好三个要点1.数据段:segmentends2.堆栈段:segmentends3.代码段e segmentends这三个框架。
编辑好程序如下; multi-segment executable file template.data segment; add your data here!a db 0b db 1c db 0pkey db "press any key...$"endsstack segmentdw 128 dup(0)endscode segmentstart:; set segment registers:mov ax, datamov ds, axmov es, ax; add your code heremov al ,aadd al,bmov c,allea dx, pkeymov ah, 9int 21h ; output string at ds:dx; wait for any key....mov ah, 1int 21hmov ax, 4c00h ; exit to operating system.int 21hendsend start ; set entry point and stop the assemble d1 segment进行编译后:无错误后点击运行:程序中实现了赋值,传址,加法,中断等功能。
微机原理与接口技术实验报告_6

《微机原理与接口技术》实验报告班级:组员:实验二 74HC138译码器实验1、编写程序:使用82C55的PC0、PC1、PC2控制74HC138的数据输入端,通过译码产生8选1个选通信号,轮流点亮8个LED指示灯。
2、运行程序,验证译码的正确性。
实验源程序:.MODEL TINYCon_8255 EQU 0F003H ;8255控制口PC_8255 EQU 0F002H ;8255 PC口.STACK 100.CODESTART: MOV DX,Con_8255MOV AL,80HOUT DX,AL ;8255初始化,PC口作输出用MOV DX,PC_8255MOV AL,0START1: OUT DX,ALCALL DelayINC ALJMP START1Delay PROC NEAR ;延时Delay1: XOR CX,CXLOOP $RETDelay ENDPEND START实验三 8259A 中断控制器实验一、实验目的与要求了解8259A 的内部结构、工作原理;了解8259A 与8088的接口逻辑;掌握对8259A 的初始化编程方法,了解8088是如何响应中断、退出中断的。
复习本节实验内容,可尝试自行编写程序,做好实验准备工作,填写实验报告。
二、实验设备STAR 系列实验仪一套、PC 机一台 三、实验内容1、编制程序:拨动单脉冲开关,“”送给8259A 的IR0,触发中断,8088计数中断次数,显示于G5区的数码管上四、实验原理图45CS 1WR 2RD 3D74D65D56D47D38D29D110D011CAS012CAS113GND 14CAS215SP/EN 16INT 17IR018IR119IR220IR321IR422IR523IR624IR725INTA 26A027VCC 288259U28CS RD WR D7D0D1D2D3D4D5D6SP/EN INTIR0IR1IR7IR2123487651KR96A0VCC INTA(0F000H)CS1INTA(B2)INTR五、实验步骤1、连线说明:B3区:CS 、A0 —— A3区:CS1、A0 B3区:INT 、INTA —— ES8688:INTR 、INTA B3区:IR0 —— B2区:单脉冲E5区:CS 、A0 —— A3区:CS5、A0 E5区:CLK —— B2区:2M E5区:A 、B 、C 、D—— G5区:A 、B 、C 、D2、运行程序3、上下拨动单脉冲开关,拨动二次,产生一个“”,观察结果,数码管上显示的次数与拨动开关次数是否对应。
微机原理与接口技术实验报告

微机原理与接口技术》上机报告学院:机电学院指导教师:胡勇学号:631424210229 姓名:鞠其林实验一初级程序的编写与调试实验、实验目的1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序.2、深入了解数据在存储器中的存取方法, 及堆栈中数据的压入与弹出3、掌握各种寻址方法以及简单指令的执行过程.二、实验内容1、设堆栈指针SP=2000H,AX=3000H,BX=5000H请, 编一程序段将AX的内容和BX 的内容进行交换. 请用堆栈作为两寄存器交换内容的中间存储单元, 用DEBUG调试程序进行汇编与调试.程序:MOV AX,3000MOV BX,5000MOV SP,2000PUSH AXPUSH BXPOP AXPOP BXHLT2、设AX=0002H,编一个程序段将AX的内容乘10, 要求用移位的方法完成程序:MOV AX,0002 MOV BX,AX MOV CL,2 SHL AX,CL ADD AX,BX MOVCL,1 SHL AX,CL HLT三、心得体会从这个程序的编辑过程中我感受到了汇编语言的强大,很直观的就可以读懂程序的含义,但代码比较难记,而且语法严谨,我调试的过程中犯了一点错误,修改的次数较多,希望我以后可以不再犯同样的错误,也是因为我练的比较的 少,还很生疏,我以后一定多加练习,把汇编学好 实验二 加法及判断程序的编写与调试、实验目的 1、熟练掌握编写汇编语言源程序的基本方法和基本框架2、学会编写顺序结构 , 分支结构和循环结构的汇编程序3、掌握程序中数据的产生与输入输出的方法. 二、实验内容1、用汇编语言编写一个加法程序:1325+9839请用ASCII 码的形式将加数与被加数存放在数据区DATA1和DATA2中, 并将相加结果显示输出.程序:DATA SEGMENTDATA1 DB '5','2','3','1'DATA2 DB '9','3','8','9'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXLEA SI,DATA1LEA DI,DATA2MOV CX,4MOV AH,0NEXT:MOV AL,[SI]ADC AL,[DI]ADC AL,AHMOV AH,0AAAADD AL,30HMOV [DI],ALINC DIINC SILOOP NEXTMOV CX,5ADD AH,30HMOV [DI],AHNEXT1:MOV DL,[DI]MOV AH,02INT 21HDEC DILOOP NEXT1MOV AH,4CH INT 21H CODE ENDSEND START2、假设有一组数据:5,-4,0,3,100,-51, 请编写一程序, 判断:每个数是否大于0?等于0?还是小于0?并输出其判断结果, 即即:1 当X>0Y=0 当X=0-1 当X<0程序:DATA SEGMENTDATA1 DB 5, -4, 0 ,3,100,-51STRING1 DB'Y=1','$'STRING2 DB'Y=0','$'STRING3 DB'Y=-1','$'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP(?)STACK CODE ENDS SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA SI,DATA1 MOV CX,6NEXT: MOV AL,[SI]CMP AL,0 JZ NEXT1 JNS NEXT2 JS NEXT3NEXT1:MOV DX,OFFSET STRING2 MOV AH,09H INT 21H JMP NEXT4NEXT2:MOV DX,OFFSET STRING1 MOV AH,09H INT 21H JMP NEXT4NEXT3: MOV DX,OFFSET STRING3MOV AH,09H INT 21H NEXT4:INC SILOOP NEXTMOV AH,4CH INT 21HCODE ENDSEND START三、心得体会通过程序汇编,熟练掌握运用轻松汇编软件的方法,学会了使用循环位移指令的方法,并巩固了对各项指令运用。
微机原理与接口技术实验报告参考

微机原理与接口技术实验报告实验一显示程序实验一、实验目的1. 掌握在PC机上以十六进制形式显示数据的方法;2. 掌握部分DOS功能调用使用方法;3. 熟悉Tddebug调试环境和Turbo Debugger的使用。
二、实验所用设备1. PC微机一台。
三、实验内容一般来说,程序需要显示输出提示运行的状况和结果,有的还需要将数据区中的内容显示在屏幕上。
本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS功能调用完成一些提示信息的显示。
实验中可使用DOS功能调用(INT 21H)。
(1) 显示单个字符输出入口:AH=02H调用参数:DL=t出字符(2) 显示字符串入口:AH=09H调用参数:DS:DX串地址,’$'为结束字符(3) 键盘输入并回显入口:AH=01H返回参数:AL=t出字符(4) 返回DO系统入口:AH=4CH调用参数:AL=M回码四、实验步骤1. 运行Tddebug软件,选择Edit菜单,根据实验内容的描述编写实验程序,本实验显示部分参考实验流程如图1-1示;2. 使用Compile菜单中的Compile和Link对实验程序进行汇编、连接;3. 使用Rmrun菜单中的Run,运行程序,观察运行结果;4. 使用Rmrun菜单中的Debug调试程序,观察调试过程中,数据传输指令执行后,各寄存器及数据区的内容;5. 更改数据区中的数据,考察程序的正确性。
图1-1显示程序实验流程图五、程序清单DATA SEGMENTMES DB 'laoshihao:', 0AH,0DH,'$' SD DB 'b'DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET MESMOV AH, 09HINT21HMOV DI, OFFSET SDMOV AL, DS:[DI]AND AL, 0F0HSHR AL,4CMP AL, 0AHJB L1ADD AL, 07HL1: ADD AL, 30HMOV DL, ALMOV AH, 02HINT21HMOV AL, DS:[DI]AND AL, 0FHCMP AL, 0AHJB L2ADD AL, 07HL2: ADD AL, 30HMOV DL, ALMOV AH, 02HINT21HMOV AX, 4C00HINT21HCODE ENDSEND START六、实验调试过程调试过程中出现警告,显示没有使用堆栈段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一上机练习实验目的:1、掌握用编辑软件编辑程序文本的方法。
在DOS环境下,熟练掌握用MASM5.0宏汇编程序对ASM文件进行编译、连接等操作步骤。
2、熟悉用DEBUG调试程序。
实验要求:选取教科书中一典型例题,用编辑软件在PC机中形成ASM文件,然后编译、连接,生成目标文件和可执行文件。
再用DEBUG程序进行调试。
实验步骤:实验程序如下:data segmentary1 db 12,34,45,56,67,78,89,90,18cont1 equ $-ary1 ;ary1的长度sum1 dw ?ary2 db 13h,24h,57h,68h,9ah,0bch,0cdh,0deh,80h,50hcont2 equ $-ary2sum2 dw ?data endscode segmentassume cs:code, ds:datastart: mov ax,datamov ds,axlea si,ary1mov cx,cont1 ;设定循环次数为ary1的个数call sumlea si,ary2mov cx,cont2call summov ah,4ch ;结束程序功能调用4CHint 21hsum proc ;求和程序段,求该段所有数之和xor ax,ax ;ax清零为下面加法准备next1: add al,[si]adc ah,0inc siloop next1mov [si],axret ;返回调用程序sum endp ;程序段结束code endsend start点击“运行”点击“编译成目标文件”,编译成功后,再“运行”=〉“生成可执行文件”,然后运行,即可。
运行成功以后,可进行调试。
点击工具栏的调试按钮,出现调试框。
其命令如下:输入a,进行逐行汇编,输入c,比较两内存块,输入d,内存信息以16进制显示;输入e,修改内存指定的字节;输入f,可以预置一段内存;输入g,执行程序;输入h,制算术运算;输入i,从指定端口地址输入;输入l,读盘;输入m,内存块传送;输入n,置文件名;输入o,从指定端口地址输出;输入q,结束DEBUG调试;输入r,显示和修改寄存器;输入s,查找字节串;输入t,跟踪执行;输入u,反汇编;输入w,存盘操作。
实验总结:1、通过实验,熟悉了MASM环境,了解了程序书写,编译和运行的方法。
2、实验过程中,在调试的时候,各调试命令的用法十分复杂,如指令P,单输入p只会执行一步,若要一次执行多步,可以在后面加上数字。
通过练习,熟悉了各调试指令。
实验二两个多位十进制数相加实验目的:1、学习数据传送和算术运算指令的用法。
2、熟悉在PC机上建立、汇编、连接、调试和运行汇编语言程序过程。
实验要求:将两个多位十进制数(如四位)相加,要求被加数、加数以ASCII码形式按顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前)。
结果显示在屏幕上。
实验步骤:实验程序如下:DATAS SEGMENTnum1 db '3','2','4','5','0' ;被加数num2 db '2','6','7','1','0' ;加数s db '5423+1762=$' ;显示的公式形式,$表示输出结束DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,ES:DATASSTART:MOV AX,DATASMOV DS,AX ;DS指向数据段mov ES,AX ;ES指向数据段mov cx,5 ;5次循环lea dx,s ;要显示的字符串的首偏移地址mov ah,9h ;9号DOS功能调用显示字符串sint 21hmov si,offset num1 ; si指向num1首地址mov di,offset num2 ; di指向num2首地址clc ;清零进位寄存器CFadds: LODSBadc al, [di] ;有符号加法aaa ;调整ASCII码加法结果指令stosb ;所得结果以字节为单位存储到数据段di指向的位置,di+1loop adds ;循环知道cx为零,cx-1mov ah,02h ;以下为输出加法结果mov cx,5 ;共有5位数循环5次adjust:mov dl,[di-1]or dl,30h ;二进制数转换成其相应ASCII码dec di ;输出下一位int 21hloop adjustMOV AH,4CHINT 21H ;21号功能调用程序退出CODES ENDSEND START输入程序编译成功以后,显示如下图:实验总结:1、通过实验,学会了使用汇编语言实现多位十进制数的相加运算。
2、实验中应注意,在声明data的部分数字的顺序和实际中数字的顺序是相反的,因为存储器是从低位到高位存储的。
3、要为DATAS段指定两个段寄存器DS和ES分别存放加数和被加数,同时相加结果也存放在ES段中。
4、了解LODSB的用法,每次循环后SI都会自动加一,与此类似的STOSB使用时,寄存器DI指向的地址也会自动后移一位。
5、通过实验,我还了解了ASCII码到BCD码运算的转变,以及运算结果的BCD 码通过调整转变成ASCII码存储和显示。
实验三两个数相乘实验目的:掌握乘法指令的用法实验要求:实现一个多位十进制数和一个一位十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,结果显示在屏幕上实验步骤:实验程序如下:DATA SEGMENTA DB '5','7','4','1','3' ;被乘数B DB '7' ;乘数M DB 6 DUP(0) ;6位字节型存储单元S DB ' 31475*7=$' ; 输出的公式DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXCLD ;将方向标志寄存器DF清零,指令LODSB和STOSB中di,si做自增1的处理MOV SI,OFFSET A ;A为源操作数MOV DI,OFFSET M ;B为目的操作数MOV CX,5AND B,0FH ;将ASCII码数据转换成二进制形式MOV BYTE PTR[DI],0L1: mov al,[si] ;乘数与被乘数相乘LODSBAND AL,0FHMUL BAAMADD AL,[DI]AAAmov [di], alinc diSTOSBMOV [DI],AH ; 结果的存储inc siLOOP L1MOV DX,OFFSET SMOV AH,9INT 21HMOV CX,6L2: MOV DL,[DI]ADD DL,30HMOV AH,02HINT 21H ;显示所得数据DEC DILOOP L2MOV AX,4CHINT 21HCODE ENDSEND START实验结果如下图所示:实验总结:1、通过实验学会了,使用汇编语言完成相乘运算。
2、试验中通过设定CX的值控制循环的次数。
3、在LODSB和STOSB指令中,SI和DI会每次自动增加1。
4、在A串中,由于数据是按从低地址到高地址的顺序存放的,所以A DB '5','7','4','1','3'其实表示的是31475 。
5、程序的L2 循环使得所存二进制数据转换成相对应的ASCII码,并通过DOS 功能调用输出。
实验四字符匹配程序实验目的:掌握串操作指令的用法。
实验要求:用串操作指令设计程序。
实现在指定存储区(长度:100H)中寻找匹配字符,遇空格字符(20H)结束,显示查找结果。
实验步骤:实验程序如下:DATA SEGMENTTISHI_1 DB 0dH,0AH,'Please input a character to search: $' TISHI_2 DB 0DH,0AH,'The string to be searched is:'STRING DB 10 DUP('A'),20H,15 DUP('B'),'$'COUNT EQU $-STRINGS0 DB 0DH,0AH,' FOUND! $'S1 DB 0DH,0AH,'NOT FOUND! $'CHAR DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATAGO: MOV AX,DATAMOV DS,AXMOV ES,AXmov dx, offset TISHI_1 ;显示字符串mov ah,09int 21H;mov ah,1 ;从键盘输入数据int 21Hmov CHAR, al ;输入数据保存;MOV DI,OFFSET STRINGMOV CX,COUNTCLD ;自增MOV AL,CHARREPNE SCASB ;字符串字节查找直到相等JZ FOUND ;ZF=0时跳到FOUND指令MOV DX,OFFSET S1JMP DSPLYFOUND: MOV DX,OFFSET S0 ;找到DSPLY: MOV AH,09H ;显示INT 21Hmov dx,offset TISHI_2mov ah,09int 21H;MOV AH,4CHINT 21HCODE ENDSEND GO实验总结:1、程序中用到了三个DOS功能调用,分别是9号调用显示字符串,1号调用从键盘输入字符和4CH调用终止程序。
9号使用DX指向字符串首地址,1号结果存在AL中。
通过实验,对DOS功能调有了更加深刻的认识。
2、在对字符串的查找过程中,使用了SCASB指令,并且前面有REPNZ。
该指令表示在一直查找直到ZF=0,即找到与AL寄存器相等的值为止。
这个指令稍微有些复杂,再加上前缀的变化,使其可以满足不同的查找需要。
3、程序中出现了JMP指令。
单独的JMP指令为无条件转移,不过JMP还常常与标志寄存器一起使用,使其功能更强大。
如题目中的JZ指令表示ZF=1即相等时转移。
实验五字符串匹配程序实验目的:掌握提示信息的使用方法及键盘输入信息的用法。
实验要求:编写程序,实现两个字符串比较。
若相同,则显示’MATCH’,否则显示’NO MATCH’。
实验步骤:实验程序如下:DATA SEGMENTSTRING1 DB 'ABCDEFG$'COUNT1 EQU $-STRING1STRING2 DB 'ABCDEDG$'COUNT2 EQU $-STRING2S0 DB ' MATCH$'S1 DB ' NOT MATCH$'SHIFT DB 0DH,0AH,'$' ;回车换行DATA ENDS;CODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATAGO: MOV AX,DATAMOV DS,AXMOV ES,AXMOV DX,OFFSET STRING1 ;显示字符串1MOV AH,09HINT 21HMOV DX,OFFSET SHIFT ;回车换行INT 21HMOV DX,OFFSET STRING2 ;显示字符串2INT 21HMOV DX,OFFSET SHIFTINT 21HMOV AL,COUNT1 ;首先比较字符串长度是否相等MOV AH,COUNT2CMP AH,ALJNZ NMATCHMOV DI,OFFSET STRING1 ;长度相等比较内容MOV SI,OFFSET STRING2MOV CX,COUNT1CLD ;自增REPE CMPSB ; 一直比较直到不相等JZ MATCH ;ZF=0相等则跳转NMATCH:MOV DX,OFFSET S1 ;NO MATCH JMP DSPLYMATCH: MOV DX,OFFSET S0 ;MATCH DSPLY: MOV AH,09HINT 21HMOV AH,4CH ;终止程序INT 21HCODE ENDSEND GO实验总结:1、本实验与上一个实验内容类似,不过不同之处在于直接比较两个已存在的字符串内容是否相等。