zoukankan      html  css  js  c++  java
  • 汇编语言实验四

    (一)编程,向内存 0:200 ~ 0:23F 依次传送数据 0 ~ 63,程序中只能使用 9 条指令,9 条指令包括 mov ax,4c00H 和 int 21H。

     思路:

    • 这题有两个变量,一个是内存地址,另一个是需要向内存地址传入的数据。
    • 存放数据的内存地址还可以看成是 0020:0 ~ 0020:3FH
    • 访问内存的段地址是 0000H,这个地址可以存储在 DS 中。地址偏移量的变化可以存储在 BX 中
    • 数据和内存地址的变化次数都是 64。
    • loop 的次数存放在 CX 中,大小为 64。
    assume cs:code
    
    code segment
    
            mov ax,0020h
            mov ds,ax
            mov bx,0h  
            mov cx,64
         s: mov [bx],bl
            inc bx
            loop s
    mov ax,4c00h int 21h code ends end

    这题有两个要注意的地方:

    • 为了达到题目的要求(最多只能使用 9 条指令),所以使用了内存地址了另一种等价形式,这样可以减少寄存器的使用。
    • 由于是将寄存器中的数送入内存,所以只能使用 BX 寄存器的低八位 BL 来向内存传送数据,否则会造成位数不匹配的后果。

    (二)下面的程序的功能是将 mov ax,4c00H 之前的指令复制到内存 0:200(0020:0) 处,上机调试,跟踪程序运行结果。

    assume cs:code
    
    code segment
    
                mov ax , (   )        ; ax 里面应该存放的是指令的首地址的段地址
                mov ds , ax
                mov ax , 0020h
           mov es , ax
    mov bx , 0 mov cx , ( ) ; cx 里存放的是总共要复制的字节数 s: mov al , [ bx ] mov es: [ bx ] , al inc bx loop s mov ax , 4c00h int 21h code ends end

     为了完成这道题, 需要解决下面 3 个问题:

    • 复制的是什么?
    • 从哪里到哪里?
    • 有多少个字节?

    很显然,需要复制的是内存中的字节,复制方向是从内存到内存。但是需要先将数据传入寄存器中作为中转。从上面的程序可以知道,这个中转寄存器是 AL。

    至于有多少个字节,可以先将第二个空随便添上一个数,程序加载如内存后,查看 CX 寄存器中的值,则是程序的总字节数,再减去最后两条指令的字节数。

    由于是要复制当前程序,所以肯定得知道当前程序被加载如内存后的地址,CS 段寄存器中存储的是指向程序代码段的段地址,故将 CS 寄存器中的指向代码的段地址赋值给 DS(通过 AX 中转)。

    [ bx ] 作为偏移地址为 BX 的内存单元,它支持的段地址默认是存储在 DS 段寄存器中的。

    本例中 ds:[bx] 指向的是存储代码段的内存单元(源内存段)。由于 DS 被占用了,所以目标内存单元的段地址就没有存储的段寄存器了,这时可以使用 ES 寄存器。如果同样使用 [bx] 偏移地址的话,必须明确的指出它的前缀,故es:[bx]就指向了内存是0200H的内存单元地址段。

    综上,完成的程序应该为如下:

    assume cs:code
    
    code segment
    
                mov ax , cs
                mov ds , ax
                mov ax , 0020h
             mov es , ax
                mov bx , 0
                mov cx , 23
    
             s: mov al , [ bx ]        ; 不写段地址默认的是 ds
                mov es: [ bx ] , al
                inc  bx
                loop s
                mov ax , 4c00h
                int 21h
    code ends
    end
  • 相关阅读:
    Adobe产品在Lion上的已知问题
    SAP HANA能否推动实时应用?
    如果Android与Chrome合体?
    基于MINA构建简单高性能的NIO应用MINA架构
    Drupal 测试邮件发送
    jQuery doTimeout插件: 比setTimeout实用
    Raven – 社会化浏览器
    LSO/Flash Cookie
    CSS3动画效果animate.css
    seaJs的模块定义、模块加载及模块依赖关系
  • 原文地址:https://www.cnblogs.com/KKSJS/p/9974645.html
Copyright © 2011-2022 走看看