汇编语言程序设计实验报告724615800.doc

上传人:e****s 文档编号:62236807 上传时间:2022-11-22 格式:DOC 页数:13 大小:200KB
返回 下载 相关 举报
汇编语言程序设计实验报告724615800.doc_第1页
第1页 / 共13页
汇编语言程序设计实验报告724615800.doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《汇编语言程序设计实验报告724615800.doc》由会员分享,可在线阅读,更多相关《汇编语言程序设计实验报告724615800.doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 汇编语言程序设计实验报告实验室:S318 最后一次实验时间: 2010 年 5 月18 日 第12周星期二1 - 2节 学院:计算机科学与技术学院 专业:计算机科学与技术 实验一实验题目:认识Tddebug集成环境实验目的:1. 熟悉汇编程序的开发过程。2. 认识Tddebug集成操作软件。3. 掌握在Tddebug集成环境中编辑、编译、连接汇编语言程序方法。4. 掌握INT 21H软件中断来调用DOS内部子程序的方法实验主要步骤:1.运行Tddebug软件,选择Edit菜单编写实验程序2.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。3.使用Rm

2、run菜单中的Run运行程序,观察运行结果。4.使用Rmrun菜单中的Debug调试程序,查看程序段、数据段、附加段装入内存后的分配情况。单步执行数据传送指令后,观察各寄存器及数据区的内容。过程如下:1) 按F7单步执行,在代码区中有一个三角,表示正在执行的指令。每一条指令的执行一定会使目标寄存器和状态寄存器发生变化,从相关窗口看结果。2) 检查内存数据区的内容,关键是找出用户程序的数据段和附加段:l 方法1:在CPU窗口按Tab键使内存数据显示区成为活动区,按Ctrl+G键,输入:“DS或ES寄存器的值:偏移地址”,即可显示用户指定的数据区l 方法2:选择菜单View| Dump,弹出内存数

3、据显示窗口。3) 查看执行结果:按Alt+F5,切换到用户窗口。5.更改数据区中的数据,考察、调试程序的正确性。6.程序代码:;数据传送实验,采用相对寻址方式DDATASEGMENT ;定义源数据段MSRDB HELLO,WORLD!$LENEQU $- MSRDDATAENDSEXDA SEGMENT ;定义附加数据段MSDDB LEN DUP(?)EXDA ENDSMYSTACK SEGMENT STACK ;定义堆栈段DW 20 DUP(?)MYSTACK ENDSCODE SEGMENT ;定义代码段ASSUME CS:CODE,DS:DDATA,ES:EXDASTART:MOV AX

4、,DDATAMOV DS,AX ;装载数据段寄存器MOV AX,EXDAMOV ES,AX ;装载附加数据段寄存器MOVSI,OFFSET MSRMOV DI,OFFSET MSDMOV CX,LENMOVBX,0NEXT: MOV AL,MSRBX ;开始传输数据MOV ES:MSDBX,ALINCBXLOOP NEXTPUSH ESPOP DS ;将附加段寄存器指向的段值赋给数据段寄存器MOV DX,OFFSET MSDMOV AH,9 INT 21H ;显示字符串MOV AH,4CH INT 21H ;返回DOS状态CODE ENDS END START实验结果:通过Tddebug软件写

5、好实验程序后,对程序进行编译连接,最终生成执行文件,在dos环境下启动后,进入Tddebug,对程序进行单步执行,可看到在每一步执行过程中,程序所分得的地址单元。连接试验箱后,通过对试验箱的操作,能够看到在dos环境下程序的执行步骤。代码运行结果:显示:“HELLO,WORLD!”心得体会:通过本次试验,是我回顾了在学习单片机的时候使用的Tddebug集成开发软件使用方法,了解了汇编程序的开发过程。能够在Tddebug环境下进行编辑、编译、连接程序,掌握了INT 21H软件中断的调用DOS内部子程序的方法。但对于DOS环境下的汇编程序的编辑、编译、连接使用还不是很熟悉,只能是Tddebug集成

6、软件开发环境下熟悉的编译连接运行。实验二实验名称:I/O程序设计实验目的:1.理解软中断的调用方法及中断过程。2.掌握INT 21H软件中断来调用DOS系统I/O子程序的方法。3.掌握将存储在内存单元中的数据在屏幕上显示的方法。4.掌握从键盘输入信息到内存的方法。实验内容:1将指定数据区中一个字节的数据以十六进制数形式显示在屏幕上。2编程由键盘输入任意一个字符,将该字符的ASCII码值显示在屏幕上。3从键盘输入两个1位十进制数,计算二者之和,并将结果显示在屏幕上。4编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上实验步骤:1.画出实验流程图。2.运行Tddebug软件,选择Edit菜

7、单编写实验程序3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。4.使用Rmrun菜单中的Run运行程序,观察运行结果。5.使用Rmrun菜单中的Debug调试程序。单步执行指令,观察各寄存器及数据区的内容。更改数据区中的数据,考察程序的正确性实验代码:图2-1 一个字节数以十六进制数形式显示处理流程DATASEGMENTMESDBShow a as hex:,0AH,0DH,$SDDBaDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOVDS,AXMOVDX,OFFSET MES;

8、显示提示信息MOVAH,09HINT 21HMOVSI,OFFSET SDMOVAL,DS:SIANDAL,0F0H;取高4位 MOV CL,4SHRAL,CLCMPAL,0AH;是否是A以上的数JBC2ADDAL,07HC2:ADDAL,30HMOVDL,AL ;显示字符 MOVAH,02HINT21HMOVAL,DS:SIANDAL,0FH;取低4位CMPAL,0AHJBC3ADD AL,07HC3:ADDAL,30HMOVDL,AL;显示字符 MOVAH,02HINT21HMOVAH,4CH ;返回DOSINT21HCODEENDSENDSTART实验结果:代码运行结果:显示“61H”心

9、得体会:本次实验要求我们将指定数据区的一个数据转换为其十六进制数,通过这次实验,我充分理解了什么是软中断,以及软中断的调用方法和中断过程,并了解了INT 21H软中断来调用DOS系统I/O子程序的方法,并知道如何将存储在内存单元中的素具显示在屏幕上。在老师的讲解过程中,我对试验提供的参考代码有了更深的了解,明白了如何进行调用软中断。实验三实验名称:代码转换程序设计实验目的:1.了解微机中所使用的各类数制及编码方法。2.掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解。3.掌握将存储在内存单元中的数据以十六进制数形式、十进制数形式和二进制数形式显示在屏幕上的方法。实验内容:1将5

10、位十进制数的数字串转换为一个字的二进制数2编写程序将内存中一个字的数转换为十进制数的数字串显示。(压栈或者字符串)3编程将十进制的数字串转换为BCD码4编程将BCD码转换为二进制数5编程将二进制数转换为十进制数显示实验步骤:1.画出实验流程图。2.运行Tddebug软件,选择Edit菜单编写实验程序3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。4.使用Rmrun菜单中的Run运行程序,观察运行结果。5.使用Rmrun菜单中的Debug调试程序。单步执行指令,观察各寄存器及数据区的内容。6.更改数据区中的数据,考察程序的正确性。实验流程图:图6-2

11、 将5位十进制数的数字串转换为二进制数参考流程图6-3 将十进制数的数字串转换为BCD码参考流程 代码:DDATASEGMENTMESDBThe ascii code of decimal code are:$BUFDB30H,30H,30H,31H,32H ;十进制00012的ASCII码DB10H DUP(0)DDATAENDSCODE SEGMENTASSUME CS:CODE,DS:DDATASTART:MOV AX,DDATA MOVDS,AX MOV SI,OFFSET BUF MOVBL,0AH ;送乘数 MOV CX,0004H ;送转换位数 MOV AH,00H MOV AL

12、,SI ;取第一位ASCII码 SUB AL,30HA1: INC SI IMUL BL ;乘10 (AL*BL) 放在AX中 ADD AL,SI SUB AL,30H LOOP A1 MOV BX,AX MOVDX,OFFSET MES ;显示提示信息 MOVAH,09H INT21H MOV AX,BX ;显示结果 MOV CX,4A3: PUSH CX MOV CL,4 ROL AX,CL ;向左移位 POP CX MOV BX,AX AND AL,0FH ;高4位清零,保留低4位的值 CMP AL,0AH JB A2 ADD AL,07HA2: ADD AL,30HMOV DL,ALM

13、OV AH,02HINT 21H MOV AX,BX LOOP A3 MOV AH,4CHINT 21HCODEENDSEND START实验结果:代码运行结果:显示“00001010”心得体会:本次实验要求我们将5位十进制数的数字串转换为一个字的二进制数,通过这次实验,我了解了微机中所使用的各类数制及编码方法,并知道了不同进制数及编码相互转换的程序设计方法,加深了对数码转换的理解,并掌握了将存储在内存单元中的数据以十六进制数形式显示在屏幕上的方法。在刚开始实验的时候对于将十进制数转换为二进制有点不知道怎么办,虽然知道应该怎么算,但是却不知道怎么样写代码,通过对参考代码的理解,对于将十进制转换

14、为二进制有了一定的概念,知道了要写一个转换进制的实验的基本步骤了。 对上述实验我进行了一定的修改,代码如下:data segment buf db 6,6 dup(0) msg1 db Please input X:,0ah,0dh,$ msg2 db 0ah,0dh,Please input P:,0ah,0dh,$ msg3 db 0ah,0dh,Result: ,0ah,0dh,$data endscode segment assume cs:code,ds:data ;将字符串转换为十进制数的子程序 ;输入参数:字符处首地址 ;输出参数:ax(保存十进制数) StrToNum proc

15、 push bx mov bx,10 StrToNum_s1: mul bx and bufsi,0fh add al,bufsi inc si loop StrToNum_s1 pop bx ret StrToNum endp ;功能:输出P进制数子程序 ;输入参数:ax ;输出参数:无 Print proc push ax push bx push cx push dx ;保护 xor cx,cx s1: mov dx,0 div bx push dx inc cx cmp ax,0 jne s1 mov ah,02h s2: pop dx add dl,30h cmp dl,39h ja

16、 s1 int 21h loop s2 jmp ok add dl,7h int 21h loop s2 ok: pop dx pop cx pop bx pop ax ret Print endp start: mov ax,data mov ds,ax mov dx,offset msg1 ;输出msg1 mov ah,09h int 21h mov dx,offset buf ;输入十进制数X mov ah,0ah int 21h mov cl,buf1 mov si,2 mov ax,0 call StrToNum ;调用将字符串转换为十进制 push ax ;暂存ax mov dx,

17、offset msg2 ;输出msg2 mov ah,09h int 21h mov dx,offset buf ;输入p mov ah,0ah int 21h mov cl,buf1 mov si,2 mov ax,0 call StrToNum ;调用将字符串转换为十进制 mov bx,ax mov dx,offset msg3 ;输出msg3 mov ah,09h int 21h pop ax call Print mov ax,4c00h int 21hcode endsend start运行结果如下:Please input X: /输入一个数9Please input P: /选择

18、显示输出结果的进制数2Result: 1001实验四实验名称:综合程序设计实验目的:掌握子程序的写法、循环的调用,利用汇编语言编写简单的程序。实验内容:编程由键盘输入任意一位数,将该数以二进制数形式显示在屏幕上要求:含有子程序,循环实验步骤:1.画出实验流程图。2.运行Tddebug软件,选择Edit菜单编写实验程序3.使用Compile菜单中的Compile和Link对实验程序进行汇编、连接,生成执行文件。4.使用Rmrun菜单中的Run运行程序,观察运行结果。5.使用Rmrun菜单中的Debug调试程序。实验流程图:确定转化的位数 nCX=8CF=0循环取数保存到相应单元转换完否送屏幕显示

19、n 实验代码:;输入一个数,选择显示进制,并在屏幕上显示出来data segment buf db ? msg1 db Please input X:,0ah,0dh,$ msg2 db 0ah,0dh,Result: ,0ah,0dh,$data endscode segment assume cs:code,ds:data d_to_b proc near mov buf, 2 mov cx, 8 mov al, buf ed: clc rcl byte ptr buf, 1 jnc one mov ah, 02h mov dl, 1 int 21h jmp ll one: mov ah,

20、 02h mov dl, 0 int 21h ll: loop ed ret d_to_b endp start: mov ax,data mov ds,ax mov dx,offset msg1 ;输出msg1 mov ah,09h int 21h mov ah, 01h int 21h mov buf, al mov dx,offset msg2 ;输出msg2 mov ah,09h int 21h call d_to_b mov ax,4c00h ;返回 int 21hcode endsend start实验结果:代码运行结果:Please input X:6Result:00000110心得体会:本次实验是一个综合性实验的设计,在本次实验中,要求我们编写一个程序,实现从键盘任意输入一位数,将该数以二进制形式显示在屏幕上,并且在程序中必须包括子程序及循环。在做这个题目的过程中,遇到了很多问题,刚开始的时候是使用clc清零CF标志位,但是最终的到的结果是,无论输入什么数,都是00000000,最后经过和同学讨论,猜得到最后的正确结果,不是clc的问题而是需要把后面的一句改成“rcl byte ptr buf, 1”,最后算是水里完成呢个了本次试验。通过这次实验,我对于汇编语言有了更深的了解,并学会了如何用汇编进行简单程序的编写。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 工程图纸

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁