zoukankan      html  css  js  c++  java
  • 实验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)讲的也是这个点。

    总结:

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

      

  • 相关阅读:
    转载JGTM' 2004[MVP]有关AOP的三篇精彩文章
    新增Skin
    发表文章的要求
    自定义UserControl的属性为什么不能在设计时显示在属性窗口中
    .Text学习笔记(一)
    访问类的private或internal成员[转载]
    博客园对发表文章的一些要求
    博客园成立了管理团队
    推荐一篇介绍.NET MetaData的文章
    让大家久等了:终于完成了AOP尝鲜系列之第三部[JGTM'2004 [MVP]文章转载]
  • 原文地址:https://www.cnblogs.com/sunguanglin/p/10016580.html
Copyright © 2011-2022 走看看