东南大学微机实验及课程设计第一、二次报告_第1页
东南大学微机实验及课程设计第一、二次报告_第2页
东南大学微机实验及课程设计第一、二次报告_第3页
东南大学微机实验及课程设计第一、二次报告_第4页
东南大学微机实验及课程设计第一、二次报告_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一 指令与汇编语言基础一、实验目的1、了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点2、掌握汇编语言程序指令编辑、宏汇编、连接和运行的基本概念3、熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程序,修改环境4、学会利用DEBUG或TD检查认识指令功能的正确方法二、实验内容1、必做内容(1) 要求计算两个多字节十六进制数之差: 3B74AC60F8-20D59E36C1=?式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。(2) 以BUFFER为首地址的内存区

2、存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。2、选做内容(1) 两个字符串的长度均为10,首地址分别为STRING1和STRING2,比较两个字符串是否完全相同,如果相同,将BL寄存器置为00H;如果不完全相同,将BL寄存器置为FFH,并将第一个字符串中的第一个不相同字符的地址放在SI寄存器中。三、实验原理1、实验基本步骤(1)用任意一种文本编辑器(EDIT、NOTEPAD、UltraEDIT等)建立编辑汇编源程序,并将其保存为文件名.asm文件,将其放入带汇编工具的文件夹中(d:tasm)。注:文件名不要起的过长,在连接时可能会出现

3、cant find file的问题。(2)开始菜单,点运行条目,打入cmd命令进入DOS调试环境。(3)进入该文件夹(cd d:tasm) ,键入如下命令开始编辑程序 : d:zxj>edit 文件名.asm(4)将程序保存后返回DOS进行汇编,键入如下命令: d:zxj>tasm 文件名.asm 如果汇编通过,进行下一步,如果出现error,返回3步骤,根据错误的行数进行修改,然后重新汇编,直到不产生error为止。此时若出现warning可不予理会。(5)将程序进行连接,键入如下命令: d:zxj>link 文件名.obj如果连接正确,进行下一步,如果错误返回3步骤进行修

4、改,然后重新编译和连接。(6)执行程序,键入如下命令: d:zxj> 文件名.exe如果执行正确,则应该显示正确结果;如果执行错误,返回步骤3,重新编译连接和执行。(7)如果不能直接从程序中找出错误,可以应用Debug程序进行调试,键入如下命令: d:zxj> td 文件名.exe在找出错误后,重新返回3步骤,重新编译连接和执行。2、实验相关操作界面(1)TD操作界面四、程序及流程1-1DATA SEGMENTDATA1 DB 0F8H,60H,0ACH,74H,3BHDATA2 DB 3 DUP(0)DATA3 DB 0C1H,36H,9EH,0D5H,20HDATA4 DB 3

5、 DUP(0)DATA5 DB 8 DUP(?)DATA ENDS ;定义数据段CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化 MOV CX,5 ;装入循环次数 MOV SI,0 CLC ;初始进位清零LOOPL:MOV AL,DATA1SI SBB AL,DATA3SI ;带借位相减 MOV DATA5SI,AL ;结果装入DATA5 INC SI LOOP LOOPLMOV AH,4CH ;程序结束INT 21H CODE ENDSEND START开始输入减数和被减数CX=5SI=0带借位相减CX=CX

6、-1SI=SI+1CX=0?结束1-2DATA SEGMENTNUM DW1234H,2345H,3456H,5678H,6789H,789AH,0ABCDH,0BCDEH,0CDEFH,0EDF1HMIN DW 1 DUP(?)DATA ENDS ;定义数据段CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX ;初始化 LEA SI,NUM ;用SI寻址NUM CLD ;自增 LODSW MOV MIN,AX ;第一个数装入MIN MOV CX,9 ;设置比较次数NEXT:LODSW ;取出下一个数 CMP AX,MIN

7、 ;与MIN比较 JGE GOON ;大于或等于转GOON JL RELOAD ;小于转RELOADRELOAD:MOV MIN,AXGOON:LOOP NEXT ;CX=0?MOV AH,4CHINT 21H ;程序结束CODE ENDSEND START1-3DATA SEGMENTSTRING1 DB 'ABCDEFJHIJ'STRING2 DB 'ABFMEWATER'DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AX LEA SI,STRING1 LEA DI

8、,STRING2 MOV CX,10 CLD REPE CMPSB JCXZ ALLMATCH DEC SI DEC DI JMP DONEALLMATCH:MOV BX,00HDONE: MOV BX,0FFHOUT: MOV AH,4CH INT 21HCODE ENDS END START五、实验结果1-11-21-3六、遇到的问题及解决办法1、一开始老师上课讲说是要在windows XP系统上运行dos环境,但由于自己的电脑本身是windows 7的系统,而又不想装虚拟机,便多方咨询了同学,从网上下了一个可以在win7 32位系统上运行的tasm.exe,link.exe等的调试汇编程

9、序的相关软件,同时又下载了一个dosbox软件以运行相关程序。2、在一开始调试程序的时候,由于对程序编写的规则还是不太清楚,因此忘记了对数据段(DS)进行初始化,导致用td调试结果的时候,执行go to:ds:0000的时候,查不到应该得到的数据。于是,又重新查找了一下书上的例子,找到了错误之处,改正后再次调试,得到了正确的结果。3.因为初次接触dos环境和td调试界面,具体应该怎样操作并不是特别熟悉,在实验的过程中遇到了很多问题,譬如怎样在td中查找结果,验证结果是否正确;怎样运行td等等,经过一步一步的探索与尝试,慢慢了解了操作方法。 实验二 汇编语言程序设计一、实验目的:进一步熟悉汇编语

10、言的编辑、宏汇编、链接和运行的基本概念熟练掌握动态调试程序TD/DEBUG的常用指令和窗口功能,学会用TD/DEBUG调试程序,修改数据和寄存器环境熟悉掌握汇编语言程序的典型数据结构设计、典型程序控制方法,了解DOS/BIOS功能调用的基本方法二、实验内容:基本操作内容:(1)、掌握进入全屏命令行方式、修改环境的方法启动开始菜单里的运行选项,键入cmd,即可启动命令行方式,在其属性栏中选择全屏即可进入全屏命令行方式。(2)、确定源程序的存放目录,构建个人实验环境。(3)、建立、编辑汇编源程序选择程序样本,构建典型的汇编程序框架,包括基本的数据段、堆栈段和代码段,编写程序实现如下功能:必做:2-

11、1.从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其它字符不变),并按原顺序将这些字符在屏幕上显示出来(参考程序P36),并显示字符串“The total number is XXXXX”。2-2.从键盘输入一个0255之间的十进制数,将其转换为16进制数,并在屏幕上显示变换前后的数据(参考程序P38) 。选作:2-3、从键盘输入5个十六进制带符号数(范围为-128+127),请将它们按从大到小排序,并将排序前后的数据显示在屏幕上。(4)、用汇编工具(MASM/TASM.EXE)汇编源程序产生OBJ目标文件,将所要变异的源程序文件(文件名.asm)放到

12、带汇编工具的文件夹中,在全屏命令行模式下,进入该文件夹,输入tasm 文件名.asm,回车后即可编译产生OBJ目标文件。(5)、用链接程序(LINK/TLINK.EXE)产生EXE可执行文件,产生OBJ目标文件后,继续输入:tlink 文件名.obj,回车后即可产生EXE可执行文件。(6)、用调试工具软件(TD.EXE/D)调试执行程序在Windows中启动TDa、 仅启动TD而不载入要调试的程序双击TD.EXE文件名,Windows就会打开一个DOS窗口并启动TD。启动TD后会显示一个版权对话框,这时按回车键即可关掉该对话框。b、 启动TD并同时载入要调试的程序把要调试的可执行文件拖到TD.

13、EXE文件名上,Windows就会打开一个DOS窗口并启动TD,然后TD会把该可执行文件自动载入内存供用户调试。若建立可执行文件时未生成符号名表,TD启动后会显示“Program has no symbol table”的提示窗口,这是按回车键即可关掉该窗口。观察CPU寄存器、存储器环境TD启动后呈现的是一个具有窗口形式的用户界面,称为CPU窗口。单步、断点运行,观察中间结果,完成正常执行。TD功能键F7为跟踪进入(对CALL指令将跟踪进入子程序),F8为单步跟踪(对CALL指令将执行完子程序返回后才停下),F2为在当前光标处设置、清除断点。通过单步、断点运行中观察数据区、各个寄存器值的变化,

14、以验证程序运行是否正确。修改当前运行环境,直接编写程序片段,验证指令功能。a、 修改寄存器(AX、BX、CX、DX、SI、DI、BP、SP),并观察修改段寄存器。b、 修改存储器,并指定不同存储段。c、 修改 CS:IP,单步运行制定指令(F7或F8),观察指令运行结果。d、 将光标放置在TD窗口的代码区右击,可显示代码区的局部菜单,选择相应功能进行操作。重点解决段存储结构和数据变量的定义和访问。访问数据段中具体位置的值时,可将光标放置在数据区,右击产生数据区菜单。三、实验原理: 四、实验源程序(主要部分)和流程图:2-1:data segmentinput db 100,100 dup(0)

15、string1 db 0dh,0ah,'please input your strings',0dh,0ah,'$'string2 db 0dh,0ah,'the strings you input are:',0dh,0ah,'$'string3 db 0dh,0ah,'do you want to continue(y/n):',0dh,0ah,'$'string4 db 0dh,0ah,'the total numer is:',0dh,0ah,'$'numbe

16、r db 00hdata endsstacks segment stack db 256 dup(0)stacks endscode segment assume cs:code,ds:data,ss:stacksmain proc farstart:mov ax,data mov ds,axloop1:mov dx,offset string1 mov ah,09h int 21h mov dx,offset input mov ah,0ah int 21h mov dx,offset string2 mov ah,09h int 21h mov al,input1 mov number,a

17、l call disp mov dx,offset string4 mov ah,09h int 21h call show mov dx,offset string3 mov ah,09h int 21h mov ah,01h int 21h cmp al,'y' jz loop1 mov ah,4ch int 21hmain endpdisp proc near xor cx,cx mov cl,input1 mov si,2again:mov dl,inputsi cmp dl,61h jb next cmp dl,7ah ja next sub dl,20hnext:m

18、ov ah,02h int 21h inc si loop again retdisp endpshow proc near mov al,number mov ah,0h mov cl,0ah div cl add al,30h add ah,30h mov ch,ah mov dl,al mov ah,02h int 21h mov dl,ch mov ah,02h int 21h retshow endp code endsend start2-2:data segmentright db 1input db 4,5 dup(0)output db 00hten db 0ahstring

19、1 db 0dh,0ah,'please input your number(0255)',0dh,0ah,'$'string2 db 0dh,0ah,'the number you input is(00hffh):',0dh,0ah,'$'string3 db 0dh,0ah,'do you want to continue(y/n):',0dh,0ah,'$'string4 db 0dh,0ah,'the number you input is not from 0255',0

20、dh,0ah,'$'string5 db 0dh,0ah,'the number you input is(0255):',0dh,0ah,'$'data endsstacks segment stack db 256 dup(0)stacks endscode segment assume cs:code,ds:data,ss:stacksmain proc farstart:mov ax,data mov ds,ax mov ax,stacks mov ss,axloop1:mov output,00h mov dx,offset strin

21、g1 mov ah,09h int 21h mov dx,offset input mov ah,0ah int 21h mov right,1 mov dx,offset string5 mov ah,09h int 21h call showin call change cmp right,0 jz error mov dx,offset string2 mov ah,09h int 21h mov ah,output mov dl,ah mov cl,4 shr dl,cl call disp mov dl,ah and dl,0fh call disp mov dl,48h mov a

22、h,02h int 21h jmp goerror:mov dx,offset string4 mov ah,09h int 21hgo: mov dx,offset string3 mov ah,09h int 21h mov ah,1 int 21h cmp al,'y' jz loop1 cmp al,'Y' jz loop1 mov ah,4ch int 21hmain endpchange proc near clc xor ax,ax xor bx,bx xor dx,dx mov cl,input1 mov si,2again:mov bl,inp

23、utsi cmp bl,30h jb error1 cmp bl,39h ja error1 sub bl,30h dec cl cmp cl,0 jz over mov ax,1 push cxloop2:mul ten loop loop2 pop cx mul bx add output,al jc error inc si jmp againover:add output,bl jnc over1error1:mov right,0over1:retchange endpdisp proc near push dx push ax cmp dl,9 jbe num add dl,7nu

24、m:add dl,30h mov ah,02h int 21h pop ax pop dx retdisp endpshowin proc near clc xor ax,ax xor bx,bx xor dx,dx mov cl,input1 mov si,2again1:mov dl,inputsi cmp dl,30h jb error2 cmp dl,39h ja error2 mov ah,02h int 21h inc si dec cl cmp cl,0 jnz again1 jmp over2error2:mov right,0over2:retshowin endp code

25、 endsend start2-3:data segmentinput1 db 4,5 dup(0)input2 db 4,5 dup(0)input3 db 4,5 dup(0)input4 db 4,5 dup(0)input5 db 4,5 dup(0)temp db 00h,00htempout db 00houtput db 00h,00h,00h,00h,00hstring1 db 0dh,0ah,'please input your number(00hffh):',0dh,0ah,'$'string2 db 0dh,0ah,'the nu

26、mber you input is(00hffh):',0dh,0ah,'$'string3 db 0dh,0ah,'the number after ordering is(00hffh):',0dh,0ah,'$'string4 db 0dh,0ah,'do you want to continue(y/n):',0dh,0ah,'$'data endsstacks segment stack db 256 dup(0)stacks endscode segment assume cs:code,ds:

27、data,ss:stacksmain proc farstart:mov ax,data mov ds,ax mov ax,stacks mov ss,axloop:mov dx,offset string1 mov ah,09h int 21h mov dx,offset input1 mov ah,0ah int 21h mov dx,offset string1 mov ah,09h int 21h mov dx,offset input2 mov ah,0ah int 21h mov dx,offset string1 mov ah,09h int 21h mov dx,offset

28、input3 mov ah,0ah int 21h mov dx,offset string1 mov ah,09h int 21h mov dx,offset input4 mov ah,0ah int 21h mov dx,offset string1 mov ah,09h int 21h mov dx,offset input5 mov ah,0ah int 21h call showin mov al,input12 mov temp0,al mov al,input13 mov temp1,al call change mov al,tempout mov output0,al mo

29、v al,input22 mov temp0,al mov al,input23 mov temp1,al call change mov al,tempout mov output1,al mov al,input32 mov temp0,al mov al,input33 mov temp1,al call change mov al,tempout mov output2,al mov al,input42 mov temp0,al mov al,input43 mov temp1,al call change mov al,tempout mov output3,al jmp loop

30、2loop1:jmp loop ;77loop2:mov al,input52 mov temp0,al mov al,input53 mov temp1,al call change mov al,tempout mov output4,al call order;85 mov dx,offset string3 mov ah,09h int 21h mov si,0circle:mov ah,outputsi mov dl,ah mov cl,4 shr dl,cl call disp mov dl,ah and dl,0fh call disp mov dl,48h mov ah,02h

31、 int 21h mov dl,0h mov ah,02h int 21h inc si cmp si,5 jnz circle mov dx,offset string4 mov ah,09h int 21h mov ah,1 int 21h cmp al,'y' jz loop1 ;110 cmp al,'Y' jz loop1 ;112 mov ah,4ch int 21hmain endpshowin proc near mov dx,offset string2 mov ah,09h int 21h mov si,2circle1:mov dl,input1si mov ah,02h int 21h inc si cmp si,5 jnz circle1 mov dl,0h mov ah,02h int 21h mov si,2circle2:mov dl,input2si mov ah,02h int 21h inc si cmp si,5 jnz circle2 mov

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论