• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

孤独的饺子、

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

实验内容&实验结论

1. 实验任务1

使用任意一款文本编辑器,编写8086汇编源程序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

(1)使用masm、link工具汇编、链接的命令行及运行结果截图

 

 

(2)查看PSP的命令截图

(3)结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图

(4)用g命令执行到line16退出执行之前的截图

2. 实验任务2 

使用任意一款文本编辑器,编写8086汇编源程序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

(1)使用masm、link工具汇编、链接的命令行及运行结果截图

(2)结合可执行文件加载后寄存器CX的值,使用u命令精确反汇编截图

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

<1>用G命令调试到出现循环的位置,然后用P命令执行循环内容,再用T命令去进行单步调试,当再次遇到INT 21时,用P命令退出本次调试

<2>用G命令调试到出现循环的位置,然后用T命令进行单步调试

 

 

(4)把ex2.asm中line9 mov cx, 4改成mov cx, 8,保存后重新汇编、链接、运行并观察结果

回答问题:结合上述实验和观察,分析、对比ex2.asm和ex1.asm,它们实现的是否是相同的功能和效果?在具体实现上有什么不同?

分析:  

  三次图案的不同应该是由于循环的次数不同,mov cx,4所表示的意思是将循环进行4次,mov cx,8是将循环进行8次。

  其中,ex1.asm使用mov直接赋值,ex2.asm使用loop循环对其赋值。

3. 实验任务3 

给出源代码

assume cs:code
code segment
    mov ax,0b800h
    mov ds,ax
    
    mov bx,07b8h
    mov ax,0437H
    mov cx,16
    s:    mov [bx],ax
    add bx,2
    loop s
    
    mov ax,4c00h
    int 21h
code ends
end

(1)结果截图。

(2)把填充的字数据,从0237H 改成0239H,再次保存后,汇编、链接、运行,观察结果。

(3)把填充的字数据,从0237H 改成0437H,再次保存后,汇编、链接、运行,观察结果。

回答问题:猜测并分析,这个字数据中高位字节里存放的是什么信息,低位字节里存放的是什么信息。

分析:

  从0237改成0239:颜色均为绿色,数字由7变为9。

  从0237改成0437:颜色由绿色变红色,数字均为7。

  由此看出,改变高位字节可以改变颜色,改变低位字节可以改变内容。

4. 实验任务4

(1)编写完整汇编源程序,实现向内存0:200~0:23F依次传送数据0~63(3FH)。

assume cs:code
code segment
    mov ax,20h
    mov ds,ax

    mov cx,40h
    mov bx,00h
s:    mov [bx],bx
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end

(2)灵活使用debug的t命令、g命令、p命令调试。在程序退出前,用d命令查看0:200~0:23F,确认是否将0~3F传送至此段内存区域。

分析:由此可见0~3F已传送至此段内存区域。

5. 实验任务5

填空以后的源代码

  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

mov ax,4c00前共有10行代码,先设置cx为31即1fh,再根据debug中反汇编后查看mov ax,4c00代码的地址,修改cx的值

根据上图,将cx改为17h后再汇编、链接、运行、debug

分析用:D命令查看,发现已经复制到指定内存

posted on 2020-11-05 21:59  孤独的饺子、  阅读(129)  评论(3)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3