• 汇编学习--第二天


    第三章 寄存器

    3.4

    问题3.5

    检测点 3.1

    (1)

    mov ax,1  
    mov ds,ax  
    mov ax,[0] 2662h
    mov bx,[1] e626h
    mov ax,bx e626h
    mov ax,[0] 2662h
    mov bx,[2] d6e6h
    add ax,bx fd48h
    add ax,[4] 2c14h
    mov ax,0 0h
    mov al,[2] 00e6h
    mov bx,0 0h
    mov bl,[c] 0026h
    add al,bl 000ch

    段地址:偏移地址只是表示物理地址的方式,我们查看数据地址只看 段地址*16+偏移地址 的结果,例如0110:0000和0000:1100就是同一地址,数据相同。

    (2)

    第一问:执行序列:

    1)mov ax,6622h

    2)jmp 0ff0:0100

    3)mov ax,2000

    4)mov ds,ax

    5)mov ax,[8]

    6)mov ax,[2]

    第二问

    (3)数据和地址有区别,程序(指令)是对8086CPU运行顺序的改变,数据是对地址中数据的改变,显著区别就是操作指令的不同。

    3.6 栈

    mov ax,0123h

    push ax

    mov bx,2266h

    push bx

    mov cx,1122h

    push cx

    pop ax

    pop bx

    pop cx

    任意时刻,SS:SP指向栈顶元素

    问题 3.6

    因为在执行命令之前,SP=SP-2,第一次执行命令的栈顶位置在1000E==>SS:1000H   SP=000EH

    所以在第一次执行命令之前的位置在SP=SP+2==>SP:0010H

    push先操作地址-2,再执行命令;pop先执行命令,再操作地址+2。

    3.8 栈顶越界问题

    问题 3.7

    问题 3.8

    mov ax,2000
    mov ss,ax
    mov sp,10
    mov ax,1a
    mov bx,1b
    push ax
    push bx
    mov ax,0
    mov bx,0
    pop bx
    pop ax

    栈地址,段地址和内存地址不能使用同一地址,不然指令会是“乱指令”

    ???在问题3.12下讲栈段和数据段到同一地址,但是运行时出错。可能电脑问题,暂时放这。

    猜测,应该是栈段和数据段同时使用同一地址,会出现“乱指令”

    问题 3.9

    实际上这里就是一个出栈问题,这里只要将上面代码AX,BX出栈顺序换一下就行。

    mov ax,2000
    mov ss,ax
    mov sp,10
    mov ax,1a
    mov bx,1b
    push ax
    push bx
    mov ax,0
    mov bx,0
    pop ax
    pop bx

    问题 3.10

    把10000H处作为段空间就行

    mov ax,1000
    mov ss,ax
    mov sp,2

    3.10 栈段

    问题 3.11

    10000H~1FFFFH为栈空间,和之前一样,第一条指令在SS:1000,SP:FFFEH==>SP = SP + 2----SP:0000H

    问题 3.12

    SP变化是在0000H~FFFFH,每个内存空间1B,总共16*16*16*16=65536B,也就是64KB

    检测点 3.2

    (1)

    mov ax,2000H
    mov ss,ax
    mov sp,10H

    (2)

    mov ax,1000H
    mov ss,ax
    mov sp,0H

    实验2

    (2)

    d ds:10 18  ;查看1000:0010~1000:0018中的内容

    d cs:0  ;查看当前代码段中的指令代码

    d ss:0  ;查看当前栈段中的内容

    u cs:0  ;以汇编指令的形式,显示当前代码段中的代码

    a ds:0  ;以汇编形式从1000:0开始的内存写入指令

    1--(3)

    Debug的T命令在执行修改寄存器SS指令之后,下一条指令也紧接着被执行,也就是不会再DOSBOX上显示

    2.实验任务

    (1)

    代码存入之后,T指令执行,D指令查看内存就行

    (2)

     猜测栈空间被写入了数据

  • 相关阅读:
    微软面试100 题题解
    二元查找树转变成排序的双向链表(树)
    筆試
    PE注入
    内核网络通信
    哈哈哈
    OpenCV 学习
    第一次研究VM程序中的爆破点笔记
    SE2.3.4各试用限制调试笔记
    破解相关书籍
  • 原文地址:https://www.cnblogs.com/Mayfly-nymph/p/11038691.html
Copyright © 2020-2023  润新知