微机原理与接口技术实验报告1- 汇编语言程序设计
- 格式:doc
- 大小:137.00 KB
- 文档页数:13
微机原理及接口技术实验报告实验一实验日期实验时间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、实验目的: 考察对内存寻址方式、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 软件的应用,体会汇编程序的编写、编译、执行及调试等各个环节。
微机原理与接口技术课程实验报告西安交通大学电子与信息工程学院16 位汇编语言编程实验3.1 显示程序实验一、试验目的(1)掌握在 PC 机上以十六进制数形式显示数据的方法。
掌握部分DOS 功能调用的使用方法。
(2)掌握分支程序及子程序的设计方法。
二、实验内容本实验要求将指定数据区的数据以十六进制数形式显示在屏幕上,并通过DOS 功能调用完成一些提示信息的显示,实验中可使用DOS 功能调用(INT 21H)。
表1 显示实验中可使用DOS 功能调用三、实验步骤(1) 运行 QTHPCI 软件,根据实验内容编写程序,参考程序流程如图3-1-1 所示。
(2) 使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。
(3) “调试”菜单中的“进行调试”命令进入Debug 调试,观察调试过程中数据传输。
按F9 连续运行。
(4) 更改数据区的数据,考察程序的正确性。
四、流程图图1显示程序流程四、实验结果由于程序中是实现显示“b”的ASCII码,程序运行后,通过屏幕对话框输出“b”的ASCII码为62。
输出如下:Show a as hex:62五、试验小结通过此次实验,首先,我掌握了在PC 机上以十六进制数形式显示数据的方法,掌握了分DOS 功能调用的使用方法,了解了分支程序及子程序的设计方法,完成了实验要求。
此外,通过此次实验,我还加深了对于汇编语言应用的理解,加深了对于微机原理课程内容的理解。
通过实验,把比较枯燥而抽象的课本知识变为比较形象的内容,增强了我的实验动手能力,加大了我对于课程内容学习的兴趣。
3.4 求和程序设计实验一、实验目的(1) 掌握使用运算类指令编程及调试方法。
(2) 掌握运算类指令对各状态标志位的影响及其测试方法。
二、实验内容二进制双精度加法运算.计算Z=X+Y。
按提示输入数据,在屏幕显示的运行结果中查看结果是否正确。
修改X、Y 的值,可得到不同的结果。
三、实验步骤(1) 运行QTHPCI 软件,根据实验内容编写程序。
实验一8086汇编语言的编程实践【实验目的】1.掌握8086汇编语言编程以及调试的过程。
2.学会使用masm.exe、debug.exe、td.exe等软件。
【实验内容】1.通过示范源程序熟悉从如何建立源文件到进行调试【实验步骤】1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。
如果没有创建过此目录,请用如下方法创建:通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。
请把MASM.EXE、LINK.EXE、DENUG.EXE和TD.EXE都拷贝到此目录中。
2.建立ASM源程序建立ASM源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器。
下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM),用NOTEPAD(记事本)建立ASM源程序的步骤与此类似。
在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“ C:\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口。
窗口标题行显示了EDIT程序的完整路径名。
紧接着标题行下面的是菜单行,窗口最下面一行是提示行。
菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F 打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。
如果键入EDIT命令时已带上了源程序文件名(C:\ASM\HELLO.ASM),在编辑窗口上部就会显示该文件名。
如果在键入EDIT命令时未给出源程序文件名,则编辑窗口上会显示“UNTITLED1”,表示文件还没有名字,在这种情况下保存源程序文件时,EDIT会提示输入要保存的源程序的文件名。
编辑窗口用于输入源程序。
EDIT是一个全屏幕编辑程序,故可以使用方向键把光标定位到编辑窗口中的任何一个位置上。
微机原理与接口技术实验报告班级:学号: 姓名: 实验日期:2010-10-17预习报告成绩:实验成绩:实验一系统认识实验一、实验目的掌握微型计算机汇编软件调试源程序的基本操作。
熟悉传送类指令、简单运算类指令来编写汇编语言源程序,掌握调试过程及实验结果分析。
二、实验内容1、从3500H内存单元开始建立0~15共16个数据(建立的数据为00H,01H~09H,0AH~0FH),并运行之,检查记录结果。
实验程序清单:DATA SEGMENTORG 3500H ;设定起始偏移地址MEM1 DB 16 DUP(?)DATA ENDSCODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DI,3500H ;设数据区首址MOV CX,0010H ;字节数送入CXMOV AH,00HSAHF ;清标志寄存器MOV AL,00HA1: MOV [DI],AL ;写入一字节ITC DI ;修改地址指针INC AL ;修改数据LOOP A1 ;未填完转移MOV AH,4CHINT 21HCODE ENDS ;代码段结束END START2、如果1建立的数据为BCD码表示的十进制数据(即建立的数据为00H,01H-09H,10H-15H),修改上述程序并完成调试,检查记录结果。
●实验程序清单:DATA SEGMENTORG 3500HMEM1 DB 16 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DI,3500HMOV CX,0010HMOV AH,00HSAHFMOV AL,00HDAAA1: MOV [DI],ALINC DIINC ALDAALOOP A1MOV AH,4CHINT 21HCODE ENDSEND START3、编程完成1+2+3+4+5+6+7+8+9求和运算。
西安交通大学实验报告成绩第页共页课程微机原理与接口技术实验系别生物医学工程实验日期年月日专业班级组别交报告日期年月日姓名学号报告退发 (订正、重做) 同组者教师审批签字实验名称汇编语言程序设计一、实验目的1.掌握Lab6000p实验教学系统基本操作;2.掌握8088/8086汇编语言的基本语法结构;3.熟悉8088/8086汇编语言程序设计基本方法。
二、实验设备b6000p实验教学系统;2.IBM-PC机三、实验内容1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:1)如果数组是无符号数,求出最大值,并显示;2)如果数组是有符号数,求出最大值,并显示。
2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:”4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序)5.键盘输入一个小写字母(a~z),转换成大写字母显示:请输入一个小写字母(a~z):转换后的大写字母是:6.实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H= xxxxxxxxH四、实验结果1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:(1)如果数组是无符号数,求出最大值,并显示;(2)如果数组是有符号数,求出最大值,并显示。
程序:(1)无符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTABC DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8HMAIN PROC FARSTART: MOV SI,0MOV AL,ABC[SI]A1: INC SICMP SI,9JNC EXITMOV BL,ABC[SI]CMP AL,BLJC A2JMP A1A2: XCHG BL,ALJMP A1EXIT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA E1ADD DL,30HMOV AH,2INT 21HE1: ADD DL,37HMOV AH,2INT 21HMOV DL,DHCMP DL,9JA E2ADD DL,30HMOV AH,2INT 21HE2: ADD DL,37HMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HRETMAIN ENDPEND START结果:(2)有符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTSHUZU DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H MAIN PROC FARSTART: MOV SI,0MOV AL,SHUZU[SI]L1: INC SICMP SI,9JNC NEXTMOV BL,SHUZU[SI]CMP AL,BLJL L2 ;带符号数比较 JMP L1L2: XCHG BL,ALJMP L1NEXT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA L3 ;无符号数比较 ADD DL,30HMOV AH,2INT 21HJMP L4L3: ADD DL,37HMOV AH,2INT 21HL4: MOV DL,DH ;ASCII码转换 CMP DL,9JA L5ADD DL,30HMOV AH,2INT 21HJMP L5L5: ADD DL,37HMOV AH,2INT 21HL6: MOV DL,'H'MOV AH,2INT 21HHLTMAIN ENDPEND START2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'BCD IS $'ABC DB 15 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV AX,OFFSET ABCMOV DX,AXMOV AX,500H ;分离出各位数,分别进行BCD码转换SUB DX,DXMOV CX,1000DIV CXXCHG DX,AX ;商在DX中,余数在AX中MOV BX,AXADD DL,30HMOV AH,2INT 21H ;千位转换并输出MOV AX,BXMOV CL,100DIV CLMOV DX,AXADD DL,30HMOV AH,2INT 21H ;百位转换并输出MOV AL,DHSUB AH,AHMOV CL,10DIV CLMOV BX,AXMOV DL,BLADD DL,30HMOV AH,2INT 21H ;个位转换并输出MOV DL,BHADD DL,30HMOV AH,2INT 21HRETMAIN ENDPEND START结果:3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII 是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'ASCII IS $'ABC DB 20 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV CH,4MOV AX,OFFSET ABCMOV DX,AXMOV BX,7693HEXIT: MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FH ;与运算分离出最高位MOV AH,0ADD AL,30HMOV CL,16DIV CL ;分离出高位和低位MOV DH,AHMOV DL,ALADD DL,30HMOV AH,2INT 21HMOV DL,DHADD DL,30HMOV AH,2INT 21H ;分别输出高低位DEC CHJNZ EXIT ;进行循环HLTMAIN ENDPEND START结果:4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
微机原理与接口技术实验报告专业____________________ 年级___________________ 完成时间________________小组成员_________________________________________________________________实验一汇编语言编译过程一、实验目的1、熟悉汇编语言源程序的基本格式。
2、掌握在DOS环境下汇编程序的编写、汇编和调试方法。
3、掌握在MF2KP(MIFID实验箱软件平台)环境下汇编程序的编写、汇编和调试方法。
二、实验内容软件实验1、编写汇编语言源程序2、使用MASM进行汇编,查找错误并修改3、使用LINK进行连接4、运行程序三、实验要求在DOS环境下利用文本编辑器编写汇编语言源程序,用汇编工具编译、调试、连接,生成可执行文件在DOS环境下正确运行,并记录相关数据。
四、实验仪器IBM-PC机,MFID实验箱五、实验步骤1、在DOS方式下键入edit new.asm<CR>2、输入源程序并保存3、键入masm new<CR>进行汇编,生成new.obj目标文件,并保存new.list列表文件4、如果提示有错误,参考列表文件并修改程序文件new.asm,重复第三步5、键入link new<CR>进行连接,生成new.exe可执行文件6、键入new<CR>运行程序六、实验程序stack segment stack ‘stack’dw 32 dup(?)stack endsdata segmentSB DB 9AHOBUF DB 9 DUP (?)data endscode segmentmain proc farassume ss:stack, cs:code, ds:datastart: push dssub ax, axmov ax, datamov ds, axMOV CX, 8MOV BX, 0MOV AL, SBAGAIN: MOV AH,0SHL AX, 1ADD AH, 30HMOV OBUF[BX], AHINC BXLOOP AGAINMOV OBUF[BX], ‘$’MOV DX, OFFSET OBUFMOV AH, 9INT 21Hretmain endpcode endsend start七、实验结果分析1、记录编译过程中错误并分析原因2、本程序中9号功能调用输出数据如何获得3、如将MOV CX, 8 语句中的8改为4,输出结果又是什么4、如果将语句MOV OBUF[BX], ‘$’去掉,输出结果是什么,试分析其原因微机原理与接口技术实验报告专业____________________ 年级___________________ 完成时间________________小组成员_________________________________________________________________实验二DEBUG调试一、实验目的1、熟悉使用DEBUG调试可执行文件的基本方法2、掌握在DEBUG中显示寄存器内容与显示存储器内容的命令3、掌握利用DEBUG中的反汇编命令对可执行文件进行反汇编与置断点的命令二、实验原理DEBUG是一个专门为汇编语言设计的交互式调试工具,它提供一个控制测试的环境,以便用户能够监视和控制被调试程序的执行;可以直接确定直接确定程序中出现的问题,然后立即修改程序以便判定这些问题是否已经解决,而不必重新去编写一个程序;可以直接设置寄存器和存储器的值,也可设置断点使程序暂停执行以便察看中间结果;总之,它为汇编语言程序员提供了非常有效的调试手段。
微机原理与接口技术实验报告范文计算机09级微机接口实验报告班级:学号:0906840534姓名:温泉实验一汇编语言程序设计实验一、实验目的熟悉汇编语言程序设计及TD-PITE80某86实验环境的使用。
二、实验设备PC机一台,TD-PITE实验装置或TD-PITC实验装置一套。
三、实验内容2.在数据段的3000H开始的存储单元中写入“0-9”的ASCII码值,将它们传送到同一段的4000H开始的存储单元中。
四、实验步骤(1)完成汇编程序格式,编写实验程序。
(2)编译、链接无误后装入系统。
(3)先运行程序,待程序运行停止。
(4)通过键入D命令查看程序运行的结果。
(5)可以反复测试几组数据,观察结果,验证程序的正确性。
五、实验代码STACKSSEGMENTSTACK;堆栈段DW128DUP();注意这里只有128个字节STACKSENDSDATASSEGMENT;数据段BUFFERDB'0','1','2','3','4','5''6','7','8','9' DATASENDSCODESSEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART:MOVA某,DATAS;初始化MOVDS,A某MOVES,A某MOVSI,3000HMOVC某,10MOVDI,0TEMP:MOVAL,BUFFER[DI]INCDIMOV[SI],ALINCSILOOPTEMPMOVSI,3000HMOVDI,4000HMOVC某,10REPMOVSBMOVA某,4C00H;退出程序INT21HCODESENDSENDSTART实验二8259中断控制实验一、实验目的1.掌握8259中断控制器的工作原理。
2.学习8259的应用编程方法。
3.掌握8259级联方式的使用方法。
成绩:2微机原理与接口技术课程实验报告课程:微机原理与接口技术姓名:专业:网络工程学号:132055222日期:2016年6月太原工业学院计算机工程系实验一:输入输出实验实验环境PC机+Win 2003+emu8086+proteus仿真器实验日期2016.6一.实验内容基本要求:1.熟悉emu8086仿真系统2.实现控制台输入输出3.设计并单步调试实现一位十进制数的加法运算(屏幕效果为3+2=5,红色为输入其他为自动输出)扩展要求:1.实现两位十进制和的输出2.实现一位十进制四则运算3.实现多位数运算思考内容:1.输入输出数据和计算用数据的区别2.单字符输入输出和串输入输出的不同二.理论分析或算法分析1.一般来讲,从键盘输入的数都是以ASCII码的形式存放在内存中。
对十六进制数来讲,0~9的ASCII码值分别为30H~39H,对这十个数的转换,减去30H就得到对应的二进制值,再用二进制数值进行加减乘除运算。
2.实现一位十进制数的加法运算和实现一位十进制数的减法运算的主要区别是对控制台输入的运算符不同,算术运算指令也不同,同时应该考虑加法的进位和减法的借位。
一位十进制加法与两位十进制加法运算的区别是:一位十进制加法时算术运算指令用AAA(加法的ASCII调整),两位十进制数用DAA(加法的十进制调整)。
3.在一位十进制的运算方法上,利用mov ah,01h;int 21h;输入字符。
利用mov dl,al;mov ah,2;显示到屏幕上。
将第一个数赋值给al,将第二个数赋值给bl,用add实现bl于al的相加。
4.在实现两位十进制相加的算法时,利用步骤一的方法,再次将两个值赋值给ah和bh,利用add实现十位数的带进位相加。
三.实现方法基本要求代码:mov ah, 1int 21hmov bl, al mov ah, 2 mov dl, '+'int 21hmov ah, 1int 21hand bl, 0fh and ax, 0fh add al, blaaaor ax, 3030h mov bx, ax mov ah, 2 mov dl, '='int 21hcmp bh, 30h 扩展要求代码:mov ah, 1int 21hmov bl, al mov ah, 2 mov dl, '+' int 21hmov ah, 1int 21hadd bl, al mov ah, 2 mov dl, '=' int 21hmov dl, bl sub dl, 30h mov ah, 2int 21hHlt四、实验结果分析(含执行结果验证、输出显示信息、图形、调试过程中所遇的问题及处理方法等)1、基本要求实验结果:2、扩展要求实验结果:五.结论通过本次实验,完成了一位十进制数的加法运算,两位十进制数的和输出,一位十进制数的四则运算以及多位数运算的实验要求。
实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。
2. 掌握汇编语言程序设计的基本方法。
3. 通过实验,加深对微机原理的理解。
二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。
2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。
四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。
西安交通大学实验报告成绩第页共页课程微机原理与接口技术实验系别生物医学工程实验日期年月日专业班级组别交报告日期年月日姓名学号报告退发 (订正、重做) 同组者教师审批签字实验名称汇编语言程序设计一、实验目的1.掌握Lab6000p实验教学系统基本操作;2.掌握8088/8086汇编语言的基本语法结构;3.熟悉8088/8086汇编语言程序设计基本方法。
二、实验设备b6000p实验教学系统;2.IBM-PC机三、实验内容1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:1)如果数组是无符号数,求出最大值,并显示;2)如果数组是有符号数,求出最大值,并显示。
2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII是:”4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序)5.键盘输入一个小写字母(a~z),转换成大写字母显示:请输入一个小写字母(a~z):转换后的大写字母是:6.实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H= xxxxxxxxH四、实验结果1.有一个10字节的数组,其值分别是80H,03H,5AH,FFH,97H,64H,BBH,7FH,0FH,D8H。
编程并显示结果:(1)如果数组是无符号数,求出最大值,并显示;(2)如果数组是有符号数,求出最大值,并显示。
程序:(1)无符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTABC DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8HMAIN PROC FARSTART: MOV SI,0MOV AL,ABC[SI]A1: INC SICMP SI,9JNC EXITMOV BL,ABC[SI]CMP AL,BLJC A2JMP A1A2: XCHG BL,ALJMP A1EXIT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA E1ADD DL,30HMOV AH,2INT 21HE1: ADD DL,37HMOV AH,2INT 21HMOV DL,DHCMP DL,9JA E2ADD DL,30HMOV AH,2INT 21HE2: ADD DL,37HMOV AH,2INT 21HMOV DL,'H'MOV AH,2INT 21HRETMAIN ENDPEND START结果:(2)有符号数#make_COM#; COM file is loaded at CS:0100hORG 100hJMP STARTSHUZU DB 80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H MAIN PROC FARSTART: MOV SI,0MOV AL,SHUZU[SI]L1: INC SICMP SI,9JNC NEXTMOV BL,SHUZU[SI]CMP AL,BLJL L2 ;带符号数比较 JMP L1L2: XCHG BL,ALJMP L1NEXT: MOV CL,16DIV CLMOV DX,AXMOV CL,9CMP DL,CLJA L3 ;无符号数比较 ADD DL,30HMOV AH,2INT 21HJMP L4L3: ADD DL,37HMOV AH,2INT 21HL4: MOV DL,DH ;ASCII码转换 CMP DL,9JA L5ADD DL,30HMOV AH,2INT 21HJMP L5L5: ADD DL,37HMOV AH,2INT 21HL6: MOV DL,'H'MOV AH,2INT 21HHLTMAIN ENDPEND START2.将二进制数500H转换成二-十进制(BCD)码,并显示“500H的BCD是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'BCD IS $'ABC DB 15 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV AX,OFFSET ABCMOV DX,AXMOV AX,500H ;分离出各位数,分别进行BCD码转换SUB DX,DXMOV CX,1000DIV CXXCHG DX,AX ;商在DX中,余数在AX中MOV BX,AXADD DL,30HMOV AH,2INT 21H ;千位转换并输出MOV AX,BXMOV CL,100DIV CLMOV DX,AXADD DL,30HMOV AH,2INT 21H ;百位转换并输出MOV AL,DHSUB AH,AHMOV CL,10DIV CLMOV BX,AXMOV DL,BLADD DL,30HMOV AH,2INT 21H ;个位转换并输出MOV DL,BHADD DL,30HMOV AH,2INT 21HRETMAIN ENDPEND START结果:3.将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD码7693的ASCII 是:”程序:#make_COM#; COM file is loaded at CS:0100hORG 100hJMP START;DATA SEGMENTSHUCHU DB 'ASCII IS $'ABC DB 20 DUP(?);DATA ENDSMAIN PROC FARSTART: MOV DX,OFFSET SHUCHUMOV AH,9INT 21HMOV CH,4MOV AX,OFFSET ABCMOV DX,AXMOV BX,7693HEXIT: MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FH ;与运算分离出最高位MOV AH,0ADD AL,30HMOV CL,16DIV CL ;分离出高位和低位MOV DH,AHMOV DL,ALADD DL,30HMOV AH,2INT 21HMOV DL,DHADD DL,30HMOV AH,2INT 21H ;分别输出高低位DEC CHJNZ EXIT ;进行循环HLTMAIN ENDPEND START结果:4.两个长度均为100的内存块,先将内存块1全部写上88H,再将内存块1的内容移至内存块2。
在移动的过程中,显示移动次数1, 2 ,3…0AH…64H(16进制-ASCII码并显示子程序)程序:#make_COM#; COM file is loaded at CS:0100hORG 100hjmp startdata segmentabc1 db 100 dup()abc2 db 100 dup()data endscode segmentassume cs:code,ds:datamain proc farstart: mov ax,datamov ds,axlea si,abc1mov cx,100e1: mov byte ptr[si],88h ;将值存入内存1中inc siloop e1lea si,abc1lea di,abc2mov bh,0mov cx,100e2: mov al,[si] ;内存1移至内存2 mov [di],alinc bhcall exit ;调用显示次数inc siinc diloop e2mov ah,4chint 21hmain endpexit proc ;显示移动次数push axpush cxmov dl,bhmov bl,bhmov cl,4shr dl,clcmp dl,0ahjc ee1add dl,7ee1: add dl,30hmov ah,2int 21hmov dl,bland dl,0fhcmp dl,0ahjc ee2add dl,7ee2: add dl,30hmov ah,2int 21hmov dl,0dh ;防止内存出现溢出mov ah,2int 12hee3: mov dl,'H'mov ah,2int 21hdis: mov dl,0ah ;显示所有的移动次数mov ah,2int 21hpop cxpop axretexit endpcode endsend start结果:5.键盘输入一个小写字母(a~z),转换成大写字母显示:请输入一个小写字母(a~z):转换后的大写字母是:程序:#make_COM#; COM file is loaded at CS:0100hORG 100hjmp startSTRA DB 'Please input the lowercase letters:',0DH,0AH,'$'STRB DB 'The capital letter is ',0DH,0AH,'$'MAIN PROC FARSTART: MOV DX,OFFSET STRAMOV AH,9INT 21HMOV AH,1INT 21HMOV BL,ALMOV DX,OFFSET STRBMOV AH,9INT 21HSUB BL,20HMOV DL,BLMOV AH,2INT 21HRETMAIN ENDPEND START结果:6.实现4字节无符号数加法程序,并显示结果,如99223344H + 99223344H = xxxxxxxxH程序:#make_COM#; COM file is loaded at CS:0100hORG 100hjmp startDATA SEGMENTD1 DW 5678H,1234HD2 DW 5678H,1234HSTR DB '12345678h+12345678h=:$'SUM DW 2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRMOV AH,9INT 21HLEA BX,D1LEA SI,D2LEA DI,SUMMOV CL,2CLCAGAIN:MOV AX,[BX]ADC AX,[SI]MOV [DI],AXADD BX,2ADD SI,2ADD DI,2MOV AX,[BX]ADC AX,[SI]MOV [DI],AXMOV SI,0 MOVE: MOV BX,[DI]MOV CH,4 NEXT: MOV CL,4ROL BX,CLMOV DL,BLAND DL,0FHCMP DL,0HJB NEXT2CMP DL,9HJA NEXT2OR DL,30HJMP NEXT3 NEXT2:OR DL,40HSUB DL,09H NEXT3:MOV AH,02INT 21HDEC CHJNZ NEXT MOVE1:SUB DI,2INC SICMP SI,2JZ EXITLOOP MOVE EXIT: MOV AX,DATAMOV DS,AXMOV DL,68hMOV AH,2INT 21HMOV AH, 4CHINT 21H CODE ENDSEND START 结果:。