Noseel

导航

实验1 用汇编指令编码和调试

一、实验目的

  1. 掌握8086CPU、寄存器、内存(包括栈空间)的基础知识

  2. 掌握汇编源程序组成与结构

  3. 理解和掌握寄存器间接寻址方式[bx]

  4. 掌握汇编指令mov, add, sub, jmp, push, pop,loop的用法,理解高级语言的表达和抽象机制

  5. 熟练掌握使用debug工具编写和调试x86汇编命令的方法

  6. 掌握汇编语言源程序编写→汇编→链接→调试的工具和方法

二、实验结论

  1.实验任务1:

  略…………

  2.实验任务2:

  

  使用d命令后发现01/01/92为生产日期

  

   之后使用e命令进行修改之后再使用d命令查看发现无法修改

  3.实验任务3:

  

  使用e命令修改之后左上角出现了五个❤图案

  

 

 

   使用f命令批量填充单元后在窗体最下方出现了一排的❤图案

  

 

 

  使用d命令查看后的结果

  4.实验任务4:

   填空:2E,2C,2A,28,2A,2C,2E,30

   问题1:栈顶的逻辑地址为0020:0030,物理地址为00230H

   问题2:

  

 

 

   问题3:

  

 

 

    数据并无变化

  

 

 

   数据变为70 80 50 60 30 40 10 20,因为输出是为一个字,两个两位数。

   4.实验任务4:

  问题1:

  

 

 

   单步执行后发现执行mov ss,ax之后马上执行了下一条指令mov sp,30,并没有马上暂停。

    问题2:

  

 

 

   执行push[]表示偏移量,执行指令的下一步才能查看到结果,08 01表示当前代码的偏移量,即0108,3F 07表示当前的段地址,即073F。执行完push指令后,栈顶指针向前移动,所以整体移动两个字节

  6.实验任务6:

  

assume cs:code
code segment
start:
    mov cx, 10
    mov dl, '0'
s: mov ah, 2
    int 21h
    add dl, 1
    loop s

    mov ah, 4ch
    int 21h
code ends
end start

输入代码,使用masm、link,汇编、链接,得到可执行文件task6.exe

 

 

 得到结果

 

 

 验证可知前两个字节为CD 20

 

 

 7.实验任务7:

assume cs:code
code segment
  mov ax, 076Ah
  mov ds, ax
  mov ax, 0020h
  mov es, ax
  mov bx, 0de
  mov cx, 200
 s: mov al, [bx]
  mov es:[bx], al
  inc bx
  loop s

  mov ax, 4c00h
  int 21h
code ends
end

 将段地址为076A的代码复制到目标内存0:200,所以第一个空为076AH,第二空为200

 

 三、实验总结

  通过此次实验,我了解了dosbox的一些基本实践操作,并且利用了dosbox实现了一些书本上的例子。我发现单步执行代码时,关于栈中数据的变化只有在下一步操作时才能观测到。通过动手实践也能加深自己对于汇编语言的认识,与死板的书本只是有着天差地别的认识。a命令用来数写代码 ,g命令用来实现目标地址前一步的代码,t命令逐步实现。

 

posted on 2021-10-24 16:16  Noseel  阅读(98)  评论(1)    收藏  举报