当前位置:文档之家› 西电机电院微机原理上机答案

西电机电院微机原理上机答案

汇编语言上机题姓名:学号:成绩:实验一、上机过程及DEBUG应用编写程序,建立数据段DATA,将你的姓名(汉语拼音)及学号存入DATA数据段的BUFFER1区域,然后利用程序将BUFFER1区域中的字符串(姓名及学号)依次传送到从BUFFER2开始的内存区域中去。

上机过程与要求1.建立原程序:源程序文件名为,源程序清单如下:data segmentbuffer1 db 'hepan04105038'buffer2 db 13 dup()data endscode segmentASSUME CS:CODE,DS:DATASTART:mov ax,datamov ds,axmov es,axlea si,buffer1lea di,buffer2mov cx,0dcldrep movsbmov ah,4chint 21hcode endsend start2.汇编后生成的obj文件名为buffer .OBJ3.连接后生成的目标文件名为buffer .EXE4.DEBUG调试:在DEBUG下,利用U、D、G、R等命令对EXE文件进行调试后,相关信息如下:(1)表1-1 反汇编清单中所反映的相关信息*注:最后一条指令是对应于代码段中最后一条指令(2)在未执行程序之前,用D命令显示内存区域BUFFER1及BUFFER2中的内容,其相关信息如表1-2所示。

表1-2 未执行程序之前的数据区内容(3)执行程序以后用D命令显示内存区域的相关信息,如表1-3。

表1-3 执行程序之后的数据区内容(4)用R命令检查寄存器的内容如表1-4所示。

回答问题a)宏汇编命令MASM的作用是什么答:产生OBJ文件。

b)连接命令LINK的作用是什么连接后生成什么文件答:产生EXE文件,生成EXE文件。

c)DEBUG下U命令的作用是什么答:反汇编被调试命令。

d)DEBUG下D命令的作用是什么答:显示内存单元的内容。

e) 在DEBUG下如何执行.EXE文件,写出执行命令的常用格式。

答:DEBUG 。

实验二、寻址方式练习掌握8086/8088的寻址方式是学习汇编语言的基础,因此,我们以数据传送指令为例编写了下面的程序,通过该程序对主要的几种寻址方式进行练习。

DATA1 SEGMENTM1 DB 0A0H,0A1H,0A2H,0A3H,0A4H,0A5HM2 DB 0A6H,0A7H,0A8H,0A9H,0AAH,0ABH,0ACH,0ADH,0AEH,0AFHDATA1 ENDSDATA2 SEGMENTN1 DB 0B0H,0B1H,0B2H,0B3H, 0B4H,0B5HN2 DB 0B6H,0B7H, 0B8H,0B9H,0BAH,0BBH, 0BCH,0BDH,0BEH,0BFHDATA2 ENDSSTACK SEGMENT PARA STACK ‘STACK’DB 0C0H,0C1H,0C2H,0C3H, 0C4H,0C5HDB 0C6H,0C7H, 0C8H,0C9H,0CAH,0CBH, 0CCH,0CDH,0CEH,0CFHDW 100 DUP ()TOP LABEL WORDSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA1,ES:DATA2,SS:STACKSTART: MOV AX , DATA1MOV DS,AXMOV AX , DATA2MOV ES,AXMOV AX , STACKMOV SS,AXMOV AX,OFFSET TOPMOV SP,AXMOV SI,OFFSET M2LEA DI,N2MOV AL,’5’MOV AH, 6MOV BL, M1MOV BH, [SI]MOV CL, ES:N1MOV CH, ES:[DI]MOV BP,0000HMOV DX,[BP]MOV AH,4CHINT 21HCODE ENDSEND START任务1:用EDIT建立源程序,然后汇编、连接生成目标文件。

任务2:在DEBUG下,将上述目标文件调入内存,利用U、D等命令,检查RAM区中的数据,合理使用D命令,分析所显示的信息并填写表2-1。

任务3:执行程序后, 填写表2—2中各寄存器之值。

表2—2:执行程序后各寄存器之值寄存器寄存器之值寄存器寄存器之值AX0000BP0000BX0000DS14A2CX0138ES14A2DX0000SS14B8SI0000CS14B4DI0000IP0000实验三、分支程序设计该实的验目的是掌握分支程序的设计方法;掌握转移指令的应用;进一步使用DEBUG的调试命令,达到熟练使用的目的。

在DEBUG中提供了测试各个标志位的手段,各标志位的复位(“0”状态)和置位(“1”状态)是用字符表示,如表3—1。

在实验过程中要善于观察分析标志位的变化情况。

表3—1 标志寄存器各标致位的显示字符任务3—1:二进制到ASCII码的转换在M单元存放有一个8位二进制码,将其按位转换成一串ASCII码,即将二进制1转换成字符‘1’的ASCII 码31H;将二进制0 转换成字符‘0’的ASCII码30H。

并依次存放在以STRING开始的RAM区中(高位在前,低位在后)。

转换示例见表3—2。

实验要求:1.按上述要求画出流程图,写出源程序。

testdata segment ;define data segementm db 01101011bstring db 8 dup()data endscode segmentassume cs:code,ds:datastart:mov ax,data ;define ds registermov ds,axmov si,offset m ;move m to axmov al,[si]mov bx,offset stringshift:shl al,1jc AB: mov dl,30hmov [bx],dljmp CA: mov dl,31hmov [bx],dlC: inc bxdec cxjmp shiftmov ah,4chint 21hcode endsend start2.在表3—2中分别给出了M单元中的三个数据。

在DEBUG状态下分别运行所编程序,把结果填写到表3—2的对应栏目中,并分析结果的正确性。

任务3—2 :ASCII 码到十进制的转换从STRING1单元开始,存放有一串ASCII码字符(其字符长度为十六个字节,每一个ASCII码占一个字节)。

将STRING1中每个字符转换成与之对应的十进制数字,并存放在以STRING2开始的区中(每个十进制数字占一个字节)。

如果某一个ASCII码不是0-9之间的数,则将STRING2字串中对应单元置为FFH。

实验要求:1.画出流程图,写出源程序。

data segmentstring1 db 20h,31h,48h,0ch,01h,34h,35h,30h,0dh,07h,39h,40h,3ah,33h,00h,33h string2 db 16 dup ()data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea si,string1lea di,string2mov cx,16bijiao:mov al,[si]sub al,30hjb setnumbercmp al,9ja setnumbermov [di],aljmp genggaisetnumber:mov al,0ffhmov [di],algenggai:inc siinc didec cxjnz bijiaomov ah,4chint 21hcode endsend start2.表3—3给出了STRING1的数据(十六进制的ASCII码),运行程序,填写对应结果(表3—3)。

表3—3 ASCII码到十进制转换的实验数据与运行结果实验四、循环程序设计按下列要求编写程序并上机运行。

任务4-1:显示下列图案(提示:DOS功能调用时,应使用控制码0AH和0DH分别控制换行和回车操作)。

** ** * ** * * ** * * * *DATAS SEGMENTDATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV BX,01HXUNHUAN:CMP BX,6JE STOPMOV CX,BXOUTPUT:MOV DL,'*'MOV AH,2INT 21HLOOP OUTPUTMOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HADD BX,01HJMP XUNHUANSTOP:MOV AH,4CHINT 21HCODES ENDSEND START任务4-2:由键盘输入一英文字母,将其转换成大写字母显示出来,当输入的字符不是英文字母时程序结束。

DATAS SEGMENTDATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV AH,1INT 21HCMP AL,'a'JB STOPCMP AL,'z'JA STOPSUB AL,20HMOV DL,ALMOV AH,2INT 21HJMP STARTSTOP:MOV AH,4CHINT 21HCODES ENDSEND START任务4-3:编程,将下列字符以5行、16列的表格形式显示出来(字符是按ASCII码递增顺序排列的)。

DATAS SEGMENTDATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV BH,'0'SUB BH,01HMOV CX,5NEXT:CMP CX,0JE STOPSUB CX,1MOV BL,0HXUNHUAN:CMP BL,16JE BLANKADD BL,01HADD BH,01HMOV DL,BHMOV AH,2INT 21HJMP XUNHUAN BLANK:MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HJMP NEXT STOP:MOV AH,4CHINT 21H CODES ENDSEND START。

相关主题