汇编语言程序的建立、运行与调试

实验一 汇编语言程序的建立、运行与调试

 

一、实验目的

  • 熟悉汇编语言开发环境。
  • 掌握EMU8086软件使用方法。
  • 了解汇编语言的程序结构、调试一个简单的程序。
  • 理解寻址方式的意义。

二、实验内容及要求

1.EMU8086的使用

(1)启动EMU8086程序,出现如下图所示的对话框,可选择new,建立新的汇编语言程序,也可打开code example读取示例程序。

汇编语言程序的建立、运行与调试_第1张图片

                                                      图1.1 程序启动窗口

如点new建立新的汇编程序,弹出如下对话框,选择代码的模板。

汇编语言程序的建立、运行与调试_第2张图片

                             图1.2 程序模板选择窗口

(2)选择EXE模板,点击ok,出现源代码编辑界面,如下图所示:

汇编语言程序的建立、运行与调试_第3张图片

                                               图1.3 模板创建的源程序编辑窗口

在底色为黑色的 ;add your code here文字下面输入自己的程序语句编辑源程序。

编辑完成后点save即可保存成以.asm为扩展名的汇编源文件。模板中给出的是完整段定义源程序格式,如果希望采用简化段定义格式,可在模板选择界面中按下图操作,建立空白模板。

汇编语言程序的建立、运行与调试_第4张图片

                          图1.4 创建空白模板示意图

选择empty workspace,点击OK按钮,打开如下图所示的窗口。

汇编语言程序的建立、运行与调试_第5张图片

                                                 图1.5 空白模板建立的源程序编辑窗口

在窗口中直接录入源程序代码,然后保存为扩展名为.asm的汇编语言源文件。

汇编语言程序的建立、运行与调试_第6张图片

                                                         图1.6 在空白编辑窗口中录入源程序并保存

3)程序的汇编与运行

源程序编辑完成并保存后,点击上图中的compile按钮,则自动完成对程序的汇编与链接,生成主文件名与源文件相同的扩展名为 .EXE的可执行文件。

汇编语言程序的建立、运行与调试_第7张图片

                              图1.7 汇编状态窗口

汇编语言程序的建立、运行与调试_第8张图片

                          图1.8 工作目录及生成的文件列表

点击assembler status窗口中的run按钮即可运行可执行文件。

汇编语言程序的建立、运行与调试_第9张图片

                    图1.9 程序运行状态信息

汇编语言程序的建立、运行与调试_第10张图片

                                                   图1.10 程序模拟输出窗口

4)程序的调试

点击图1.6中的emulate按钮即可启动对程序的调试。具体调试方法请参阅“Emu8086仿真软件使用方法”(随软件压缩包一起提供)。

汇编语言程序的建立、运行与调试_第11张图片

                                                      图1.11 仿真调试窗口

汇编语言程序的建立、运行与调试_第12张图片

                                              图1.12 源代码显示窗口

请自行在“Emu8086仿真软件使用方法”文件的指导下,理解图1.11仿真调试窗口中各菜单命令和功能按钮的功能和使用方法,学习调试工具的使用和汇编语言程序的调试方法。

 

2.实验要求

(1)认真学习Emu8086仿真程序的功能和使用方法;

(2)掌握8086汇编语言程序的建立过程和调试方法;

(3)掌握基本指令和伪指令语句的使用方法;

(4)理解寻址方式及逻辑地址和物理地址的变换。

(5)记录实验过程及结果,完成并提交实验报告。实验报告的格式请参见实验报告模板。

 

三、实验结果

输出结果:

汇编语言程序的建立、运行与调试_第13张图片

寄存器数据:

将代码段的段地址存入DS和ES

汇编语言程序的建立、运行与调试_第14张图片

将AX中的数据7777h和变量dvar中的数据1111h相加,结果存入ax

汇编语言程序的建立、运行与调试_第15张图片

最后的寄存器数据

汇编语言程序的建立、运行与调试_第16张图片

 

内存数据:

数据段的短地址从0710开始

汇编语言程序的建立、运行与调试_第17张图片

 

四、实验总结

此次实验,我熟悉了汇编语言的开发环境,掌握了EMU8086的使用方法,怎么创建一个汇编语言程序,如何查看寄存器中的数据以及内存中的数据,单步操作以及设置断点。我根据教材写了一个简单的程序,程序中,定义了字节变量、字变量、双字变量还有常量,还在代码段中加入了mov、add、dec等指令。指令中也使用了直接寻址、立即寻址、寄存器相对寻址等多种寻址方式。

在实验中也遇到了各种各样的问题,如此软件无法识别’?’,当我在程序数据段中定义变量时,输入?时便会报错,只好将其代替为0。还有一个问题是array db 2 dup(2,3,2 dup(4)),这样定义变量时,正确的结果应该是定义8个字节空间,数据是02,03,04,04,02,03,04,04,但此软件运行的结果是02,03,02,02,03,02,没有识别出括号里的dup(4),此软件没法进行这样的嵌套定义。

这次实验让我对这门课的知识有了更深的理解,之前还很迷糊。但自己上手打这些代码时,立马就能理解了。这对于我学习后面的内容也有了很大的帮助。

 

附录

    ; multi-segment executable file template.

    data segment

    ; add your data here!

    pkey db "press any key...$" 

    bvar1 db 100,01100100b,64h,'d'

    minint=5

    bvar2 db -1,minint,minint+5

          db 0,2 dup(20h) 

    wvar1 dw 2010h,4*4

    wvar2 dw 0

    dvar dd 12347777h,87651111h,0  ;dvar[0]为12h,而不是12347777h

    abc db 'a','b','c',0    ;可以当作一个数组,abc[0]的值是61h

    maxint equ 0ah

    string db 'ABCDEFGHIJ'

    crlfs db 13,10,'$'     ;这里的$不是结束符,'$'=24h

    array1 dw maxint dup(0)

    array db 2 dup(2,3,2 dup(4));8个字节内容依次是02,03,04,04,02,03,

    ;04,04,而此软件显示02,03,02,02,03,02,未能识

    ;别括号中的dup(4)

    ends


    stack segment

    dw   128  dup(0)

    ends


    code segment

    start:

    ; set segment registers:

    mov ax, data

    mov ds, ax

    mov es, ax


    ; add your code here 

    mov dl,bvar1 ;bvar1表示它的第一个数据100复制到DL

    dec bvar2+1 ;bvar2+1表示它的第二个数据5自减

    mov abc[3],dl  ;abc[3]和abc+3等价

    mov ax,word ptr dvar[0] ;表示取一个字,dvar[1]dvar[0],7777h

    mov dx,word ptr dvar[2] ;dvar[2]为34h,dvar[3]为12h,1234h,取了双字

    ;到DX.AX

    add ax,word ptr dvar[4] ;7777h+1111h

    adc dx,word ptr dvar[6] ;1234h+8765h+CF,完成了双字的运算

    mov word ptr dvar[8],ax ;

    mov word ptr dvar[10],dx ;双字和保存到dvar的第三个双字单元

    mov cx,maxint ;立即寻址

    mov bx,0

    again:add string[bx],3   ;寄存器相对寻址

    inc bx

    loop again

    lea dx,abc ;取abc[0]地址,从abc字符串开始显示,到后面遇到'$'结束

    mov ah,09h

    int 21h

    lea dx, pkey

    mov ah, 9

    int 21h        ; output string at ds:dx

   

    ; wait for any key....   

    mov ah, 1

    int 21h

   

    mov ax, 4c00h ; exit to operating system.

    int 21h   

    ends

    end start ; set entry point and stop the assembler.

 

 

你可能感兴趣的:(汇编语言程序的建立、运行与调试)