• 实验5


      首先,我犯了一个错误,博客园好像不可以传视频,但是已经录了屏了,且又懒不肯再截屏。。。

      (1)

        操作视频:

        https://www.bilibili.com/video/av36740824/?p=1

        1. CPU执行程序, 程序返回前,data段中的数据不变;

        2. CPU执行程序, 程序返回前, cs = 076C, ss = 076B, ds = 076A

        3. 程序加载后, code段的段地址为X, 则data段的段地址为X - 2, stack 段的段地址为 X - 1;

        

    assume cs:code, ds:data, ss:stack
    data segment
        dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
    data ends
    
    stack segment
        dw 0,0,0,0,0,0,0,0
    stack ends
    
    code segment
    start:    mov ax, stack
            mov ss, ax
            mov sp, 16
    
            mov ax, data
            mov ds, ax
    
            push ds:[0]
            push ds:[2]
            pop ds:[2]
            pop ds:[0]
    
            mov ax, 4c00h
            int 21h
    code ends
    end start

      (2)

      操作视频:

      https://www.bilibili.com/video/av36740824/?p=2

        1. CPU执行程序, 程序返回前,data段中的数据不变;

        2. CPU执行程序, 程序返回前, cs = 076C, ss = 076B, ds = 076A

        3. 程序加载后, code段的段地址为X, 则data段的段地址为X - 2, stack 段的段地址为 X - 1;

      

    assume cs:code, ds:data, ss:stack
    
    data segment
        dw 0123h, 0456h
    data ends
    
    stack segment
        dw 0,0
    stack ends
    
    code segment
    start:    mov ax, stack
            mov ss, ax
            mov sp, 16
    
            mov ax, data
            mov ds, ax
    
            push ds:[0]
            push ds:[2]
            pop ds:[2]
            pop ds:[0]
    
            mov ax, 4c00h
            int 21h
    code ends
    end start

      (3)

      操作视频:

    https://www.bilibili.com/video/av36740824/?p=3

        1. CPU执行程序, 程序返回前,data段中的数据不变;

        2. CPU执行程序, 程序返回前, cs = 076A, ss = 076E, ds = 076D

        3. 程序加载后, code段的段地址为X, 则data段的段地址为X + 3, stack 段的段地址为 X + 4;

    assume cs:code, ds:data, ss:stack
    code segment
    start:    mov ax, stack
            mov ss, ax
            mov sp, 16
    
            mov ax, data
            mov ds, ax
    
            push ds:[0]
            push ds:[2]
            pop ds:[2]
            pop ds:[0]
    
            mov ax, 4c00h
            int 21h
    code ends
    
    data segment
        dw 0123h, 0456h
    data ends
    
    stack segment
        dw 0,0
    stack ends
    
    end start

      (4)

      (1), (2)不能运行,(3)可以运行,

      根据书上内容: 程序的入口处是由end start来指定的,如果不指定,那么就是代码的第一条是入口。

      (5)

      操作视频:

      https://www.bilibili.com/video/av36740824/?p=4

      

    assume cs:code
    
    a segment
        db 1, 2, 3, 4, 5, 6, 7, 8
    a ends
    
    b segment
        db 1, 2, 3, 4, 5, 6, 7, 8
    b ends
    
    c segment
        db 0, 0, 0, 0, 0, 0, 0, 0
    c ends
    
    code segment
    start:    mov ax, a
            mov es, ax
            mov ax, c
            mov ds, ax
    
            mov bx, 0
            mov cx, 8
        s:    mov al,es:[bx]
            mov ds:[bx],al
            inc bx
            loop s
    
            mov ax, b
            mov es, ax
    
            mov bx, 0
            mov cx, 8
        s1:    mov al,es:[bx]
            add ds:[bx], al
            inc bx
            loop s1
    
            mov ax, 4c00h
            int 21h
    code ends
    end start

      (6)

      操作视频:

      https://www.bilibili.com/video/av36740824/?p=5

      

    assume cs:code
    
    a segment
        dw 1, 2, 3, 4, 5, 6, 7, 8, 9, 0ah, 0bh, 0ch, 0dh, 0eh, 0fh, 0ffh
    a ends
    
    b segment
        dw 8 dup(0)
    b ends
    
    code segment
    start:
        mov ax, b
        mov ss, ax
        mov sp, 10h;笔者之前曾在这里写了个30h,-g命令便会卡住,我忽略了栈的段地址的变化了。
    
        mov ax, a
        mov ds, ax
    
        mov bx, 0
        mov cx, 8
    
    s:    push ds:[bx]
        add bx, 2
        loop s
    
        mov ax, 4c00h
        int 21h
    code ends
    end start

    实验六提一句:实验六鼓捣了好一会儿,先是仍然忽略了进制的问题,写的的是30,后来改为了30h,仍然是出问题,使用g命令会卡住,那么问什么会卡住呢?是内存方面的原因吗? 至于为什么我会有这样的错误呢,主要是做实验之前,敲书上的代码

    练习,有过是30h的例子,不过有个前提的,那就是sp 和 cs的段地址是一样的。而在本实验中,用了不同的段,其栈段的段地址已经变化了,实验(1), (2), (3)讲的也是这个点。

    总结:

      还是要认真一点,代码要常敲,知识是宝藏,实践是打开宝藏的钥匙。

      

  • 相关阅读:
    【BZOJ3437】小P的牧场(动态规划,斜率优化)
    【BZOJ3156】防御准备(动态规划,斜率优化)
    【BZOJ2727】双十字(动态规划,树状数组)
    【BZOJ4361】isn(动态规划,容斥)
    【BZOJ1068】压缩(动态规划)
    【BZOJ4654】【NOI2016】国王饮水记(动态规划,斜率优化)
    【BZOJ2138】stone(线段树,Hall定理)
    【BZOJ4651】【NOI2016】网格(Tarjan,哈希)
    【Loj#535】花火(线段树,扫描线)
    【BZOJ4200】【NOI2015】小园丁与老司机(动态规划,网络流)
  • 原文地址:https://www.cnblogs.com/sunguanglin/p/10016580.html
Copyright © 2020-2023  润新知