微机原理实验2

合集下载

西电微机原理实验报告

西电微机原理实验报告

微机系统实验报告班级: 031214 学号: 03121370 姓名:孔玲玲地点: E-II-312 时间:第二批实验一汇编语言编程实验一、实验目的(1)掌握汇编语言的编程方法(2)掌握DOS功能调用的使用方法(3)掌握汇编语言程序的调试运行过程二、实验设备PC机一台。

三、实验内容(1)将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。

(2) 在屏幕上显示自己的学号姓名信息。

(3)循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入“Q”或“q”时结束。

(4)自主设计输入显示信息,完成编程与调试,演示实验结果。

考核方式:完成实验内容(1)(2)(3)通过,完成实验内容(4)优秀。

实验中使用的DOS功能调用: INT 21H表3-1-1 显示实验中可使用DOS功能调用AH 值功能调用参数结果1 键盘输入并回显AL=输出字符2 显示单个字符(带Ctrl+Break检查) DL=输出字符光标在字符后面6 显示单个字符(无Ctrl+Break检查) DL=输出字符光标在字符后面8 从键盘上读一个字符AL=字符的ASCII码9 显示字符串DS:DX=串地址,‘$’为结束字符光标跟在串后面4CH 返回DOS系统AL=返回码四、实验步骤(1)运行QTHPCI软件,根据实验内容编写程序,参考程序流程如图3-1-1所示。

(2)使用“项目”菜单中的“编译”或“编译连接”命令对实验程序进行编译、连接。

(3)“调试”菜单中的“进行调试”命令进入Debug调试,观察调试过程中数据传输指令执行后各寄存器及数据区的内容。

按F9连续运行。

(4)更改数据区的数据,考察程序的正确性。

五、实验程序DATA SEGMENTBUFFER DB '03121370konglingling:',0AH,0DH,'$'BUFFER2 DB 'aAbBcC','$'BUFFER3 DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXmov ah,09hmov DX,OFFSET BUFFERint 21hMOV SI,OFFSET BUFFER2lab1:cmp BYTE PTR [SI],'$'je lab2MOV AL,DS:[SI]AND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C2ADD AL,07HC2: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,DS:[SI]AND AL,0FH ;取低4位CMP AL,0AHJB C3ADD AL,07HC3: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21Hadd SI,1jmp lab1lab2:mov ah,09hmov DX,OFFSET BUFFER3int 21hmov ah,01hint 21hcmp al,'q'je lab3mov BL,ALAND AL,0F0H ;取高4位MOV CL,4SHR AL,CLCMP AL,0AH ;是否是A以上的数JB C4ADD AL,07HC4: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21HMOV AL,BLAND AL,0FH ;取低4位CMP AL,0AHJB C5ADD AL,07HC5: ADD AL,30HMOV DL,AL ;show characterMOV AH,02HINT 21Hjmp lab2lab3:mov ah,4chint 21hCODE ENDSend START六、实验结果实验二数码转换实验一、实验目的(1)掌握不同进制数及编码相互转换的程序设计方法。

微机原理与应用实验报告范文

微机原理与应用实验报告范文

微机原理与应用实验报告范文姓名:专业:学院:学号:指导老师:微机原理实验一一、实验目的1、熟悉汇编程序调试方法2、80某86指令运用及顺序结构程序设计二、实验设备80某86微型计算机三、实验内容1、编程并调试显示“HelloWord!”字符串的汇编程序STACKSSEGMENTSTACK;堆栈段DW128DUP()STACKSENDSDATASSEGMENT;数据段DATASENDSCODESSEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART:MOVA某,DATAS;初始化MOVDS,A某OUTBUFDB'HelloWord!$'MOVD某,OFFSETOUTBUFMOVAH,9;显示在屏幕上INT21HMOVAH,4CH;退出程序INT21HCODESENDSENDSTART程序调试运行结果如下图:屏幕显示有“HelloWord!”字符串2、A、B、C、D、W是互不相等的在数据段中定义的16位有符号数,并假设加减运算不产生溢出。

编写一个完整段定义的汇编语言程序(包含必要的伪指令),计算W=(A+B)某(C—D)。

STACKSSEGMENTSTACK;堆栈段DW128DUP()STACKSENDSDATASSEGMENT;数据段ADW1HBDW2HCDW5HDDW6HWDW2DUP()DATASENDSCODESSEGMENT;代码段ASSUMECS:CODES,DS:DATASSTART:MOVA某,DATAS;初始化MOVDS,A某MOVA某,AADDA某,BMOVB某,CSUBB某,DIMULB某MOVW,A某MOVW+2,D某MOVAH,4CH;退出程序INT21HCODESENDSENDSTART调试验证结果:W=(A+B)某(C—D)=(1H+2H)某(5H-6H)=-3H,结果存于097E:0008开始的的4个单元里。

微机原理实验二一、实验目的1、熟悉80某86指令及汇编程序调试方法2、掌握分支和循环结构程序设计方法的运用二、实验设备80某86微型计算机三、实验内容3、设某、Y为在数据段中定义的有符号字变量。

微机原理实验报告

微机原理实验报告

校区实验报告课程名称____________________________ 专业班级_____________________________ 学生及学号____________________________指导教师____________________________实验地点————————————————2015 ~2016 学年第二学期《微机原理与接口技术》实验一(1)实验名称存贮器部数据传送姓名系院专业电子信息类班级学号实验日期2016.6.14 指导教师成绩一、实验目的和要求1、初步掌握星研集成环境工具软件的使用方法。

2、掌握存储器部不同位置间数据传送的方法。

3、认真预习本节实验容,尝试自行编写程序,填写实验报告。

二、实验容(包括实验步骤和代码)1、编写源程序,要求将数据段中3000H~30FFH 单元的容传送给6000H~60FFH 单元中。

2、编译、连接所编写的源程序。

3、执行程序前,利用存贮器窗口将DS:3000H~300FH 中的数据改为11、22、33、44、55、66、77、88、99、AA、BB、CC、DD、EE、FF、00,存贮器窗口支持数据的直接修改功能,在相对应的地址中直接输入数据即可。

4、进入调试状态后,分别以“全速运行”、“全速断点”、“单步”、“单步进入”等方式运行程序,同时在工作区窗口的CommonRegister 视图中查看本程序所使用的寄存器(CX、DI、SI)容的变化。

5、在如下图所示的存贮器窗口中检查程序运行结果是否正确。

程序如下:.MODEL TINY ;memory mode : tiny.STACK 100 ;堆栈.CODE ;开始程序段START: MOV AX,DATAMOV DS,AXMOV ES,AXNOPMOV CX,100HMOV SI,3000HMOV DI,6000HCLDREPE MOVSBMOV CX,100HMOV SI,3000HMOV DI,6000HREPE CMPSBJNE ERRORTRUE: JMP $ERROR: JMP $END START三、实验结果及其分析1、通过该实验,成功地将数据段中3000H~30FFH 单元的容传送到了6000H~60FFH 单元中。

北京工业大学微机原理实验报告2

北京工业大学微机原理实验报告2

北京工业大学微机原理实验报告2微机原理实验报告—实验二熟悉汇编程序建立及其调试方法姓名:学号:一、实验目的1、熟悉汇编语言源程序的框架结构,学会编制汇程序。

2、熟悉汇编语言上机操作的过程,学会汇编程序调试方法。

二、实验内容1、学习编写汇编语言源程序的方法,了解数据存放格式。

2、阅读给出的程序,找出程序中的错误。

3、通过调试给出的汇编语言源程序,了解并掌握汇编语言程序的建立、汇编、链接、调试、修改和运行等全过程。

三、实验预习1、阅读实验指导第一章的内容,了解汇编语言程序建立、汇编、链接、调试的全过程。

2、下面的汇编语言源程序有错误的,试给程序加注释。

通过调试手段找出程序中的错误并修改之。

写出程序的功能,画出程序流程图。

(1)程序修改前:STACKSG:SEGMENT PARA STACK ‘STACK’ ;不能有冒号DB 256 DUP(?)STACKSG ENDSDATASG: SEGMENT PARA ‘DATA’;不能有冒号BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512DW 23,56,420,75,0,-1024,-67,39,-2000COUNT EQU 20MAX DW ?DATASG ENDSCODESG: SEGMENT ;不能有冒号ASSUME SS:STACKSG , CS:CODESGASSUME DS:DATASGORG 100HBEGIN MOV DS, DATASG ;BEGIN: 应改为MOV AX , DATASG MOV DS, AX LEA SI ,BLOCKMOV CX, COUNTDEC CXMOV AX , [SI]CHKMAX ADD SI,2 ;应加冒号CHKMAX: CMP [SI] , AXJLE NEXTMOV AX , [SI]DEC CX ;删除NEXT: LOOP CHKMAXMOV MAX ,AXMOV AH, 4CHINT 21HCODESG ENDSEND BEGIN(2)程序修改后:STACKSG SEGMENT PARA STACK ‘STACK’DB 256 DUP(?)STACKSG ENDSDATASG SEGMENT PARA ‘DATA’BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512DW 23,56,420,75,0,-1024,-67,39,-2000COUNT EQU 20MAX DW ?DATASG ENDSCODESG SEGMENTASSUME SS:STACKSG , CS:CODESGASSUME DS:DATASGORG 100HBEGIN MOV AX , DATASGMOV DS, AXLEA SI ,BLOCKMOV CX, COUNTDEC CXMOV AX , [SI]CHKMAX:ADD SI,2CMP [SI] , AXJLE NEXTMOV AX , [SI]NEXT: LOOP CHKMAXMOV MAX ,AXMOV AH, 4CHINT 21HCODESG ENDSEND BEGIN(3)程序注释:STACKSG SEGMENT PARA STACK 'STACK'DB 256 DUP(?)STACKSG ENDS ;定义堆栈段DATASG SEGMENT PARA 'DATA' ;数据段定义BLOCK DW 0,-5,8,256,-128,96,100,3,45,6,512DW 23,56,420,75,0,-1024,-67,39,-2000 ;定义变量BLOCK包含20个字COUNT EQU 20 ;COUNT=20MAX DW ? ;定义字变量MAX并不赋值DATASG ENDSCODESG SEGMENT ;代码段定义ASSUME SS:STACKSG , CS:CODESG ;说明STACKSG是堆栈段ASSUME DS:DATASG ;CODESG是代码段,DATASG是数据段ORG 100HBEGIN: MOV AX, DATASGMOV DS, AX ;DS指向DATASGLEA SI ,BLOCK ;取BLOCK的有效地址给SIMOV CX, COUNT ;CX=20DEC CX ;CX=CX-1MOV AX , [SI] ;将DS:[SI]里的值送到AX CHKMAX : ADD SI, 2 ;SI=SI+2CMP [SI] , AX ;比较DS:[SI]与AX值的大小JLE NEXT ;如果DS:[SI]的值小于AX里的值,则跳转到NEXT MOV AX , [SI] ;将DS:[SI]的值送到AXNEXT: LOOP CHKMAX ;循环CHKMAXMOV MAX ,AX ;将AX的值送到变量MAXMOV AH, 4CH ;结束INT 21HCODESG ENDSEND BEGIN(4)程序的流程图:Y NNY(5)程序的功能:找出20个数中的最大值并保存。

微机原理第二次实验报告-董东启

微机原理第二次实验报告-董东启

实验二定时器实验一、实验目的与要求利用定时器控制产生占空比可变的PWM波,通过实验验证进一步加强对定时器功能的认识,掌握定时器的使用方法。

1、用P1.0口输出PWM波,利用按键控制占空比的增加和降低,用示波器查看P1.0口的输出波形。

2、引导学生进行利用现有程序演示定时器动态显示数码管实验,了解数码管动态扫描方式。

二、实验注意事项1、启动KEIL软件,选择菜单“工程\新建工程”以建立工程(扩展名为.uv2,如T2a.uv2)。

2、选择菜单“文件\新文件”以建立一个新的文本编辑窗口,在窗口中输入参考源程序1并保存(扩展名为.asm),如test2a.asm,然后将其加入到源程序组1中。

3、在工程菜单的选项“目标1属性”中设置相应的选项,包括“输出\产生hex文件”选项以便汇编生成HEX代码供编程器使用,在“调试\使用KeilMonitor-51 Driver”的设置中选择相应的串口号。

4、使用“工程”中的“编译全部文件”完成相应的文件编译,如果程序格式正确将生成相应HEX代码文件,如T2a.hex。

如果提示有编译错误请自行修改源程序然后再重新编译。

5、用单根连线将P1.0(JP44)连接到8路指示灯部分(JP32)的LED0,将P1.6、P1.7(JP44)分别连接到JP37的K01、K02。

6、完成仿真器与计算机之间的连线并通电。

7、在KEIL软件中启动“调试\开启仿真模式”,然后用“运行”命令实现全速运行的仿真。

8、观察实验现象并分别依次按下K01、K02,观察并记录实验现象然后在KEIL软件中启动“中断运行-调试(debug)\关闭仿真模式”退出仿真,选择“工程\关闭工程”可关闭当前工程。

9、参考步骤1-4完成参考源程序2的建立与输入,如新项目T2b.uv2和新的源程序test2b.asm,完成编译与仿真设置。

10、用8PIN连线将P0口连接到数码管数据输入端,P2口连接到数码管控制端。

11、输入程序并仿真运行,注意数码管的显示内容。

微机原理实验报告

微机原理实验报告

微机原理实验报告实验⼀DEBUG 调试实验类型:实验课时:指导教师:时间:2013 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.练习使⽤DEBUG,调试简单汇编程序。

⼆、实验要求1.掌握DEBUG的使⽤,调试程序。

2.读懂程序中各条指令,说明程序功能。

三、实验内容1.启动DEBUG,⽤A命令输⼊并汇编下列程序段。

100 MOV SI,200103 MOV CX,10106 MOV AL,0108 MOV [SI ],AL10A INC SI10B INC AL10D DEC CX10E JNZ 108110 INT 3四、实验结果及分析实验⼆简单汇编语⾔设计实验类型:实验课时:指导教师:时间: 2012 年⽉⽇课次:第节教学周次:第周实验分室:实验台号:实验员:⼀、实验⽬的1.巩固DEBUG及宏汇编的使⽤。

2.加深对指令的理解。

⼆、实验要求1.设堆栈指针SP=2000H,(AX)=3000H,(BX)=5000H。

请编⼀程序将AX的内容和BX的内容进⾏交换。

请⽤堆栈作为两寄存器交换内容的中间存储单元,⽤DEBUG调试程序进⾏汇编与调试。

2.设DS=当前段指地址,(BX)=0300H,(SI)=0002H,请⽤DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装⼊0AH、0BH、0CH、0DH、0EH。

在DEBUG状态下送⼊下⾯程序,并⽤单步执⾏的⽅法,分析每条指令源地址的形成过程?当数据传送完毕时,AX中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT3.设(AX)=0002H,编⼀个程序段将AX的内容乘10,要求⽤移位的⽅法完成。

三、思想描述实验内容1将两个寄存器的内容进⾏交换时,必须有⼀个中间寄存器才能进⾏内容的交换,如果⽤堆栈做为中间存储单元,必须遵循先进后出的原则。

微机原理习题2参考答案

微机原理习题2参考答案

习题2参考答案2.1 8086 CPU共有哪些16位寄存器?其中哪些16位寄存器可分为二个8位寄存器来使用?参考答案:8086 CPU共有AX、BX、CX、DX、SI、DI、SP、BP、IP、FLAGS、CS、DS、ES、SS共14个16位的寄存器。

其中AX、BX、CX、DX可分为二个8位寄存器来使用2.2 简述8086 CPU各通用寄存器的主要功能?参考答案:8086 CPU包含AX、BX、CX、DX、SI、DI、SP、BP共8个通用寄存器。

其中AX主要用在字的乘、除法,输入/输出指令中;BX主要在寄存器间接寻址和XLAT指令中作基址寄存器使用;CX主要在串操作指令和LOOP指令中作计数器使用;DX主要在字的乘除法指令和输入/输出指令中使用;SI主要在字符串操作指令中作源变址寄存器使用;DI主要在字符串操作指令中作目的变址寄存器使用;SP主要在堆栈操作中作堆栈指针使用;BP主要在寄存器间接寻址中作基址指针使用。

2.3 8086 CPU的标志寄存器有几个状态标志位?几个控制标志位?它们各自的含义和作用是什么?在Debug环境下,对应的用什么符号来表示之?参考答案:8086 CPU的标志寄存器有6个状态标志位,有3个控制标志位。

其中CF进位标志位主要用来反映运算结果是否产生进位或借位,如果运算结果的最高位向前产生了一个进位(加法)或借位(减法),则其值为1,否则其值为0;PF奇偶标志位用于反映运算结果中低8位含有“1”的个数的奇偶性,如果“1”的个数为偶数,则PF 的值为1,否则为0;AF辅助进位标志位表示加法或减法运算结果中D3位向D4位产生进位或借位的情况,有进位(借位)时AF=1;无进位(借位)时AF=0;ZF零标志位用来反映运算结果是否为0,如果运算结果为0,则其值为1,否则其值为0;SF用来反映运算结果的符号位,当运算结果为负数时,SF的值为1,否则其值为0;OF溢出标志位用于反映带符号数运算所得结果是否溢出,如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

实验二两个多位十进制数相加实验报告

实验二两个多位十进制数相加实验报告

南昌理工学院实验报告二O一二年月日课程名称:微机原理与接口技术实验名称:两个多位十进制数相加班级:姓名:同组人:指导教师评定:签名:【一、实验名称】两个多位十进制数相加【二、实验目的】1、熟悉DOS系统命令;学习数据传送和算术运算指令的用法。

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

3、初步练习用DEBUG调试程序运行8086汇编语言程序的过程。

【三、实验内容和原理】将两个5位十进制数相加。

要求被加数和加数均以ASCII码形式各自顺序存放在以DA TA1和DATA2为首地址的5个内存单元中(低位在前),结果送回DATA1处。

另外,程序利用DOS的9号调用功能完成将被加数、加数和最后的和在显示器上的显示。

【四、实验条件】微型计算机一台,软件MASM【五、实验过程】1、用编辑软件,输入以下汇编语言源程序:参考程序如下:data segmentdata1 db , , , , ,'$'data2 db , h, , , , '$'data endsstac segmentsta db 100 dup (?)stac endscode segmentassume cs:code, ds:data, ss:stac, es:datastart proc farpush dsxor ax, axpush axmov ax, datamov ds, axmov es, axmov ah, 9mov dx, offset data1int 21hmov ah, 2mov dl, '+'int 21hmov ah, 9mov dx, offset data2int 21hmov si, offset data1mov di, offset data2mov bx, 5push bxpush siconv1: and byte ptr[si+bx-1], 0fhand byte ptr[di+bx-1], 0fhdec bxjnz conv1mov cx, 5xor ax, axadd1: mov al, [si+4]mov bl, [di+4]adc al, blaaamov [si+4], aldec sidec diloop add1pop sipop bxconv2: or byte ptr[si+bx-1], 30hdec bxjnz conv2mov ah, 2mov dl, '='int 21hmov ah, 9mov dx, siint 21hretstart endpcode endsend start2.通过编译,连接形成可执行文件3.运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微机原理实验(第二次)仅供参考不予下载2.2 字符及字符串输入输出与顺序程序设计实验2.2.1 实验目的1、学习和掌握字符及字符串的输入输出方法。

2、掌握顺序程序的设计方法。

3、进一步掌握调试工具的使用方法。

2.2.2 实验预习要求1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。

2、复习BCD码运算调整指令。

3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。

4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。

2.2.3实验内容从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。

1、问题分析比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。

由于数字09的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。

综上所述,需要考虑以下问题。

(1)从键盘输入一个一位十进制数的方法通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01HINT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中SUB AL, 30H ;减去30H后得到键入数字所代表的数值(2)提示信息字符串的显示通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。

指令格式如下:MOV DX, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串MOV AH, 09HINT 21H(2)非压缩型BCD数加法调整指令的使用设从键盘输入的数值已存放在寄存器AL, BL中,可用下列程序完成数据相加和调整操作:XOR AH,AHADD AL, BLAAA ;执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字请读者考虑,为什么要使用指令“XOR AH,AH”,不用行否?(3)计算结果的显示执行完AAA指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,并依次调用功能号为2的DOS功能调用来显示字符。

具体指令代码如下:PUSH AXMOV DL, AHADD DL, 30HMOV AH, 02HINT 21HPOP AXMOV DL, ALADD DL, 30HMOV AH, 02HINT 21H2、源程序框架DATA SEGMENTINFOR1 DB "Please Input the First Data(<10):$"INFOR2 DB 0AH,0DH,"Please Input the Second Data(<10):$"INFOR3 DB 0AH,0DH,"The Result is:$" ;0DH和0AH分别为非显示字符回;车和换行的ASCII码值,美圆符号“$”为字符串结束标志,不能省略。

DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXSUB AL, 30HMOV BL, ALSUBAL, 30HPUSH AXPOP AXPUSH AXMOV AH, 4CHINT21HCODE ENDSEND START3、 程序调试源程序编写完成后,先静态检查,无误后,对源程序进行汇编和连接,生成可执行文件。

在DOS 命令提示符下运行该程序,分析运行结果是否正确。

若结果不正确,使用DEBUG 对其进行调试。

2.2.4 实验习题1、设a,b,c,d 为四个压缩型BCD 数,它们被存放在内存dbcd 开始的4个存储单元中,计算a+b+c+d ,并将结果在屏幕上显示出来(注意压缩型BCD 数的表示方法:十进制数38表示成压缩型BCD 数时应写成38H )。

程序编写完成并运行正确后,打开源程序,改变a,b,c,d 的内容,然后重新进行汇编、连接并运行程序,检查程序运行结果与手工计算结果是否相符。

下面给出几组实验用数据:(1)a=11, b=23, c=25, d=31(2)a=10, b=20, c=30, d=40(3)a=45, b=45, c=45, c=45(4)a=88, b=99, c=77, d=66(注意压缩型BCD数的表示方法:十进制数38表示成压缩型BCD数时应写成38H)2、从键盘输入两个一位十进制数,计算这两个数之积,并将结果在屏幕上显示出来。

3、从键盘输入09中任意一个数自然数,将其平方值在屏幕上显示(使用查表法实现)。

2.2.4实验报告内容1补充实验源代码:DATA SEGMENTINFOR1 DB "Please Input the First Data(<10):$"INFOR2 DB 0AH,0DH,"Please Input the Second Data(<10):$"INFOR3 DB 0AH,0DH,"The Result is:$"DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV DX, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串MOV AH, 09HINT 21HMOV AH, 01HINT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中SUB AL, 30H ;减去30H后得到键入数字所代表的数值MOV BL, ALMOV DX, OFFSET INFOR2 ;INFOR2为在数据段中定义的要显示的字符串MOV AH, 09H1INT 21HMOV AH, 01HINT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中SUB AL, 30H ;减去30H后得到键入数字所代表的数值XOR AH,AHADD AL, BLAAA ;执行该指令后AH中为和的十位上的数字,AL中为个位上的数字PUSH AX ;保护AX,压入堆栈MOV DX, OFFSET INFOR3 ; INFOR3为在数据段中定义的要显示的字符串MOV AH, 09HINT 21HPOP AXPUSH AXMOV DL, AHADD DL, 30HMOV AH, 02HINT 21HPOP AXMOV DL, ALADD DL, 30HMOV AH, 02HINT 21HMOV AH, 4CHINT 21HCODE ENDSEND START2实验习题12主要算法流程图:代码:DATA SEGMENTdbcd DB 88H,99H,77H,66H DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATA START: MOV AX, DATAMOV DS, AXXOR AH,AHMOV SI,3MOV BX,OFFSET dbcdMOV AL,[BX]NEXT:INC BXADD AL,[BX]DAAADC AH,0DEC SIJNZ NEXTDONE:PUSH AXMOV DL,AHADD DL,30HMOV AH, 02HINT 21H ;显示百位POP AXMOV BL,ALMOV CL,4SHR AL,CL ;右移4次取高位MOV DL,ALADD DL,30HMOV AH, 02HINT 21H ;显示十位AND BL,0FH ;高4位清零取低位MOV DL,BLADD DL,30HMOV AH, 02HINT 21H ;显示个位MOV AH, 4CHINT 21HCODE ENDSEND START3写出实验小结,内容包括实验心得(收获)、不足之处或今后应注意的问题等。

实验中遇到的麻烦:刚开始在做四个BCD数的加法时,我只在加法全部做完后才使用DAA对结果进行调整,可是在调试时发现这样做出的结果是错误的,于是改为每加完一次,使用一次DAA,总共加了3次,使用3次DAA。

后来发现当结果的BCD码大于99H时,百位显示就成问题了。

想了半天,把AH作为百位,与AL做加法的同时也做和0的带进位加法,这样只要AL大于99H,DAA后CF就会变为1,把这个1加到AH中去作为百位显示就行了。

小结:通过这次的实验又进一步加深了对汇编的理解以及它的整个运行过程,能熟练掌握它的运行过程。

刚上机时只想按照老师给出的提纲,把缺省的部分照上面给出的提示简单修改后拷贝,可是当程序出错时便不知道哪里的问题也不会修改,最后静下心仔细看程序后理解了,很快就做出来了。

在今后的学习中要吸取这次的教训,不能急于求成,要脚踏实地,掌握每一个知识点。

3。

相关文档
最新文档