zoukankan      html  css  js  c++  java
  • 实验四

     
     实验内容1
    (1)源代码
    assume cs:code
    code segment
       mov bx,07b8h
       mov ax,0b800h
       mov ds,ax
     
       mov cx,16
     
       mov ax,0403h
    s:     mov [bx],ax
       add bx,2
       loop s
     
       mov ah,4ch
       int 21h
    code ends
    end
     

    (2)将源代码程序中字数据0403H→修改为0441H,再次运行,截图显示运行结果。

     

    实验内容2(必做部分)

    (1)

     1 assume cs:code
     2 code segment
     3      mov ax,0
     4      mov ds,ax
     5  
     6      mov cx,40h
     7  
     8      mov bx,200h
     9      mov al,0
    10 s:  mov [bx],al
    11      add al,1
    12      add bx,1
    13      loop s
    14  
    15      mov ah,4ch
    16      int 21h
    17 code ends
    18 end

    (2)汇编、链接无误后,灵活使用 debug 的 t 命令、g 命令、p 命令调试,用 d 命令 查看0:200~0:23F,确认是否将0~63传送至此段内存区域。这部分,要求有截图。 (选做部分,如完成,也按上述要求在博客文档中撰写相应内容)
     

     

    以下笔者检验一下

    正确,故一下用g命令结束它。

     结果检验:

     选做部分

    assume cs:code
    code segment
        mov ax,20h
        mov ss,ax
        
        mov ah,40h
        mov cx,40h
        
    s:  mov sp,cx
        sub ah,1
        push ax
        loop s
        
        
        mov ax,0 ;这部分是为了修改0:200的内容为0,上面的循环不能修改该位置。
        mov ds,ax
        mov bx,1ffh
        mov [bx],ax
        
        mov ah,4ch
        int 21h
    code ends
    end

    调试观察运行

     

     

    可见内存的修改过程。

    下面直接运行,可见结果。

     

    实验内容3

     1 assume cs:code
     2 code segment
     3    mov ax,cs;为了把指令写入,故段地址必须为cs的值;2字节
     4    mov ds,ax;
     5    mov ax,0020h;
     6    mov es,ax;
     7    mov bx,0;
     8    mov cx,17h;
     9 s:   mov al,[bx]
    10    mov es:[bx],al
    11    inc bx
    12    loop s
    13    mov ax,4c00h
    14    int 21h
    15 code ends
    16 end

    由截图可知mov ax,4c00h在0770:0017h从0000h-0017h(左闭右开)共17h个内存单元故需要17h此循环(即cx=17h)

    (刚开始可以随便赋值一个cx,然后反汇编,由于笔者截图时已经找到了cx,应该为17h故图中cx赋值为17h)

    (当然,我们假定如果cx的赋值语句不影响语句长度(即循环次数)。)

    以下调试观察执行过程

    可以观察到循环,下面我们结束运行

     

    对比本实验的第一个结果,我们发现,我们非常完美地得到了结果。

    总结与体会

    通过这次实验,我练习使用了cx,[bx],loop这些指令的使用

    CX 是计数寄存器 (count register)  (在这里找到的https://www.cnblogs.com/jordangong/p/9785544.html)

    所以cx的值就是循环次数。

    loop的指令形式有点向C语言里面的goto用法。

    第二个实验还练习了,栈的使用,

    其中mov [内存单元],ax还有一些问题(不能通过编译)。

    故直接用了mov [bx],ax的方法。

    第三题比较简单,假设后直接反汇编。

    从网上查得,8086CPU中,指令的字节大小是不定的,在1-6之间,多为2,3。

  • 相关阅读:
    scrapy怎么设置带有密码的代理ip base64.encodestring不能用 python3.5,base64库里面的encodestring()被换成了什么?
    ace模板dataTables_length控制是否显示分页
    Django AUTHENTICATION_BACKENDS
    Django自定义User模型和登录验证
    一个简单的django user.is_authenticated问题
    PHP函数(四)-变量函数
    PHP函数(三)-递归函数
    Python多进程
    Python多线程-生产者消费者模型
    Python多线程-队列
  • 原文地址:https://www.cnblogs.com/asm085/p/9954740.html
Copyright © 2011-2022 走看看