汇编语言(王爽 第三版)检测点和实验

2024-02-01 22:38

本文主要是介绍汇编语言(王爽 第三版)检测点和实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一章
检测点1.1

  1. 13
      (8kb = 8 * 1024 = 2^13)

  2. 1024 0 1023

  3. 8*1024 1024
      (1 byte = 8 bit,计算机以byte为存储单位)

  4. 1024^3 1024^2 1024

  5. 2^6 1 2^4 2^2
      (kb = 2^10 Mb = 2^20 Gb = 2^30)

  6. 1 1 2 2 4

  7. 512 256
      (8086的寄存器为16位寄存器,一次可以读取两个字节,80386为32位寄存器)

  8. 二进制

第二章
检测点2.1
1)
AX = F4A3h
AX = 31A3h
AX = 3123h
AX = 6246h
BX = 826Ch
CX = 6246h
AX = 826Ch
AX = 04D8h
AX = 0482h
AX = 6C82h
AX = D882h
AX = D888h
AX = D810h
AX = 6246h

mov ax,2
add ax,ax
add ax,ax
add ax,ax

检测点2.2
1)00010h 1000fh
(0001h+0000h 0001h+ffffh)

2)1001h 2000h
(偏移地址的范围为0000-ffff,内存单元=段地址*16+偏移地址,当偏移地址最小时,段地址最大,偏移地址最大时,段地址最小)

检测点2.3
4次修改IP,最后IP为0

第三章
检测点3.1
1)
mov ax,1
mov ds,ax
mov ax,[1000] AX = 2662h
mov bx,[1001] BX = E626h
mov ax,bx AX = E626h
mov ax,[0000] AX = 2662h
mov bx,[0002] BX = D6E6h
add ax,bx AX = FD48h
add ax,[0004] AX = 2C14h
mov ax,0 AX = 0000h
mov al,[0002] AX = 00E6h
mov bx,0 BX = 0000h
mov bl,[000C] BX = 0026h
add al,bl AX = 000Ch

CS = 2000h,IP = 0,DS = 1000h
mov ax,6622h AX = 6622h
jmp 0ff0:0100h CS = 0ff0 IP = 0100h
mov ax,2000h AX = 2000h
mov ds,ax DS = 2000h
mov ax,[0008] AX = C389h
mov ax,[0002] AX = EA66h
mov ax,6622h AX = 6622h
数据和程序表达上没有区别,只跟存储的地方有关,存在数据段中即为数据,存在程序段中就是程序

检测点3.2
1)
mov ax,2000h
mov ss,ax
mov sp,10h

mov ax,1000h
mov ss,ax
mov sp,0

实验三:

assume cs:cdsgcdsg segmentmov ax,2000Hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxmov ax, 4c00Hint 21Hcdsg endsend

实验四:

assume cs:code
code segmentmov ax,csmov ds,axmov ax,0020hmov es,axmov bx,0mov cx,17hs:mov al,[bx]mov es:[bx],alinc bxloop smov ax,4c00hint 21h
code ends
end

(1)复制的是什么?从哪里到哪里?
复制的是如上代码段数据,从mov ax,cs到loop s
(2)复制的是什么?有多少个字节?你如何指导要复制的字节的数量?
复制的是机器指令对应的机器代码,共23个字节,用debug命令U显示出代码段,用代码段的结束地址减去代码段的起始地址就是代码长度

第六章
检测点6.1
1)
mov cs:[bx],ax

cs
26或1ah
pop cs:[bx]

实验五
(1)

程序一:
assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data endsstack segmentdw 0,0,0,0,0,0,0,0
stack endscode segmentstart:  mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21h
code endsend start

1,data段中的数据和原始数据一样,没有变化:
在这里插入图片描述
2,cs=076ch、ss=076bh、ds=076ah
3,data 段的段地址为X-2,stack段的段地址为X-1

(2)

程序二:
assume cs:code,ds:data,ss:stackdata segmentdw 0123h,0456h
data endsstack segmentdw 0,0
stack endscode segmentstart:  mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21h
code endsend start		

1,data段中的数据和原始数据一样,没有变化:
在这里插入图片描述
2,cs=076ch、ss=076bh、ds=076ah
3,data 段的段地址为X-2,stack段的段地址为X-1
4,如果段中数据位N个字节,程序加载后,该段实际占据空间为:(N/16的取整数+1)*16个字节。 如果N小于16,那么实际占用16个字节(理解这个小问题);如果N大于16,那么实际占用(N/16的取整数+1)*16个字节。其实都是这个公式。
(3)

程序三:
assume cs:code,ds:data,ss:stackcode segmentstart:  mov ax,stackmov ss,axmov sp,16mov ax,datamov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]mov ax,4c00hint 21h
code endsdata segmentdw 0123h,0456h
data endsstack segmentdw 0,0
stack endsend start		

1,data段中的数据和原始数据一样,没有变化:
在这里插入图片描述
2,cs=076ah、ss=076Eh、ds=076dh
3,data 段的段地址为X+3,stack段的段地址为X+4
(4)程序三仍能正确运行,因为
如果不指名程序的(code段的)入口,并且使用end替换end start,都能正常运行。但只有(3)题中程序可以正确的执行(因为只有它是在内存中可执行代码在最前面)。

讲解:因为如果不指名入口,程序会从加载进内存的第一个单元起开始执行,前二个题中,定义的是数据,但CPU还是将数据当做指令代码执行了。只不过程序执行时逻辑上是错误了。但真的能执行的。

   如果指明了程序的入口,CPU会直接从入口处开始执行真正的机器码,直到遇到中断指令返回。此种方式能够确保程序逻辑上的正确。因此有必要为程序来指明入口
程序四:
assume cs:codea segmentdb 1,2,3,4,5,6,7,8
a endsb segmentdb 1,2,3,4,5,6,7,8
b endscz segmentdb 0,0,0,0,0,0,0,0
cz endscode segmentstart:
assume ds:a,es:b	mov ax,amov ds,axmov ax, bmov es,axmov cx, 8mov bx,0mov ah,0mov al,0s:  add al, ds:[bx]add al, es:[bx]push dsmov ax, czmov ds,axmov [bx],dlpop dsinc bxloop smov ax,4c00hint 21h		
code endsend start	

结果分析:
1)ds段寄存器在程序中可以存储不同的内存段的段地址,并不是唯一存储一个段地址,es也是如此。
2)合理利用系统自动创建的栈空间,利用栈空间来保存暂存的数据。注意压栈和弹栈的顺序,确保操作的是一个数据对象。
3)在遇到多个数据段的情况下,这种方式可以利用一个段寄存器来对多个内存段寻址。
4)在实际工程中,在程序中保存的数据,都是程序的一些必须的初始化的数据,其他的数据都应保存在磁盘文件中,需要时才读入内存中。此例中的a、b、cz段都是其他的数据,在这里就是演示。

程序五:
assume cs:codea segmentdw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a endsb segmentdw 0,0,0,0,0,0,0,0
b endscode segment
start:mov ax,amov ds, axmov ax, bmov ss, axmov sp, 16mov bx,0mov cx,8s: 	push ds:[bx]add bx,2loop smov ax,4c00hint 21h		
code endsend start

这篇关于汇编语言(王爽 第三版)检测点和实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/668702

相关文章

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置

汇编语言知识基础介绍

汇编语言是一种低级编程语言,直接与计算机硬件的指令集架构(ISA)对应。它在操作系统、设备驱动程序和性能关键的应用程序中起着重要作用。以下是汇编语言的基础介绍: 1. 基本概念 指令集架构(ISA):汇编语言与特定的处理器架构(如 x86、ARM)对应,每种架构有其特定的指令集。汇编指令:汇编语言的语法是处理器指令的符号表示,通常包括操作码(opcode)和操作数。操作码指定操作的类型,操作数

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

如何校准实验中振镜频率的漂移

在实验过程中,使用共振扫描振镜(如Cambridge Technology的8kHz振镜)时,频率漂移是一个常见问题,尤其是在温度变化或长期运行的情况下。为了确保实验的准确性和稳定性,我们需要采取有效的校准措施。本文将介绍如何监测、调节和校准振镜频率,以减少漂移对实验结果的影响。 1. 温度管理和稳定性控制 振镜的频率变化与温度密切相关,温度的升高会导致机械结构的变化,进而影响振镜的共