实验2 汇编源程序编写与汇编、调试

实验结论

1. 实验任务1

  • ex1.asm源代码如下:
;ex1.asm
assume cs:code
code segment
      mov ax, 0b810h
      mov ds, ax

      mov byte ptr ds:[0], 1
      mov byte ptr ds:[1], 1
      mov byte ptr ds:[2], 2
      mov byte ptr ds:[3], 2
      mov byte ptr ds:[4], 3
      mov byte ptr ds:[5], 3
      mov byte ptr ds:[6], 4
      mov byte ptr ds:[7], 4

      mov ah, 4ch
      int 21h
code ends
end
  • 使用masm、link工具汇编、链接的命令行及运行结果截图



  • 使用debug调试的截图
    1. 寄存器CX的值

    2. 使用u命令精确反汇编

    3. 查看PSP的命令及截图

    4. 使用g命令执行到程序退出执行之前(即源码文件中line16之前),观察结果。

2. 实验任务2

  • ex2.asm源代码如下:
; ex2.asm
assume cs:code
code segment
      mov ax, 0b810h
      mov ds, ax

      mov bx, 0
      mov ax, 101H
      mov cx, 4
s:    mov [bx], ax
      add bx, 2
      add ax, 101H
      loop s

      mov ah, 4ch
      int 21h
code ends
end
  • 使用masm、link工具汇编、链接的命令行及运行结果截图



  • 使用debug调试截图
    1. cx的值

    2. 使用u命令精确反汇编

    3. 灵活使用t命令/p命令、g命令,对ex2.exe进行调试



  • 结合上述实验和观察,分析、对比ex2.asm和ex1.asm,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?
    ex2.asm和ex1.asm实现了相同的功能和效果。具体实现上,ex1.asm重复使用mov指令向内存单元中写入数据,ex2.asm使用loop指令来实现循环功能,CX中存放循环次数,简化了程序。

3. 实验任务3

  • ex3.asm源代码如下:
;ex3.asm
assume cs:code
code segment
	     mov  ax,0b800h
	     mov  ds,ax
	     mov  bx,07b8h
	     mov  cx,16
	s:   mov  [bx],0237h
	     add  bx,2
	     loop s

	     mov  ah,4ch
	     int  21h
code ends
end
  • 运行结果截图
  • 把填充的字数据,从0237H改成0239H,再次保存后,汇编、链接、运行,观察结果。
  • 把填充的字数据,从0237H改成0437H,再次保存后,汇编、链接、运行,观察结果。
  • 猜测并分析,这个字数据中高位字节里存放的是什么信息,低位字节里存放的是什么信息。
    高位字节里存放显示颜色,低位字节里存放的是显示数字

4. 实验任务4

  • 源代码如下:
;ex4.asm
assume cs:code
code segment
	     mov  ax,0020h
	     mov  ds,ax
	     mov  bx,0

	     mov  cx,64
	s:   mov  [bx],bl
	     add  bx,1
	     loop s

	     mov  ah,4ch
	     int  21h
code ends
end
  • 汇编、链接无误后,灵活使用debug的t命令、g命令、p命令调试


  • 用d命令查看0:2000:23F,确认是否将063传送至此段内存区域

5. 实验任务5

  • 填空

  • 源码如下:
;ex5.asm
assume cs:code
code segment
         mov ax,cs
         mov ds,ax
         mov ax,0020H
         mov es,ax
         mov bx,0
         mov cx,17H
    s:   mov al,[bx]
         mov es:[bx],al
         inc bx
         loop s
         mov ax,4c00H
         int 21H
code ends
end
  • 用debug调试
  • 用d命令查看0:200之后的若干字节
  • 观察是否将mov ax, 4c00h之前的指令复制到指定内存
posted @ 2020-11-03 09:24  Ranye123  阅读(143)  评论(3编辑  收藏  举报