《汇编语言》实验二课程

 实验二预备知识:

1、debug内容补充:①D命令由debug执行,debug执行D命令时,首先将段地址1000h送入段寄存器,且默认送入ds中。

②debug依靠CPU运行的程序来执行D命令,cpu从段寄存器中得到内存单元段地址。

2、debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行,这里的内容涉及到中断机制,笔者目前对中断不够了解,等到以后学到该内容再回来补充!

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

实验二任务:

(1)使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实验情况填空。

mov ax, ffff

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0]

add ax,[2]

mov bx,[4]

add bx,[6]

push ax

push bx

pop ax

pop bx

push [4]

push [6]

下面对程序进行分析:

1、实验准备,通读实验,需查看下列内容:

① r命令查看以下内容:

d命令查看d ffff:0

d命令查看d 2000:0

2、开始实验

① 通过a命令将写入程序

②分步运行程序:

mov ax,ffff

mov ds,ax

解释:使ds指向ffff段内存,即现在的数据段从ffff:0开始

程序截图:

----------------------------------------------------------------------------------

mov ax,2200

mov ss,ax

mov sp,0100

解释:建立栈结构,使ss指向2200h内存,栈初始化栈顶指针为100h,即栈结构第一个内存单元为2200:0100 

程序截图:

注意:这里t命令在执行(mov ss,ax)时直接将(mov sp,0100)也同步执行了,与前文提到的中断机制有关。

--------------------------------------------------------------------------------------------------------------------------------------------------------

下面的段程序是将数据段ffff:0之后的内容存入ax,bx中,各机器内容可能不一致,通过d ffff:0 查看即可,本实验截图已在实验准备中

mov ax,【0】                       ; ax=C0EA      ------->将数据段 ffff:0的内存传入ax中

add ax,【2】                        ;ax=C0FC       ------->ax=C0EA+0012=C0FC

mov bx,【4】                        ;bx=30F0        ------->将数据段ffff:4的内容存入bx中

mov bx,【6】                         ;bx=6021        ------->bx=30F0+2F31

程序截图:

注意:【x】代表传输的是数据段ds的内容,由于本实验中传入的是ax,bx,故每次需传入2字节,且使用小端法。

--------------------------------------------------------------------------------------------------------------------------------------------------------

push ax                      ;sp=00FE ;           ;修改的内存单元的地址是 2200:FE到FF;内容是 FC C0                  -------------> 将栈ax=C0FC压入栈中,sp=sp-2=00FE(栈顶指针上移两位),此时栈中一个元素

push bx                       ;sp=00FC;           ;修改的内存单元的地址是 2200:FC到FD ; 内容是 21 60                 ------------->将栈bx=6021压入栈中,sp=sp-2=00FC(栈顶指针上移两位),此时栈中两个元素

pop ax                         ;sp=00FE;   ax=6021                                                                                  ------------->* 弹出栈顶元素(6120)送入ax中,ax=6021,sp=sp+2(栈顶元素下移两位)

pop bx                          ;sp=0100;  bx=C0FC                                                                               ------------->*弹出栈顶元素(C0FC)送入ax中,ax=6021,sp=sp+2(栈顶元素下移两位),栈空

push 【4】                    ;sp=00FE;           修改的内存单元的地址是 2200:FE到FF ; 内容是30 F0

push 【6】                     ;sp=00FC;            修改的内存单元的地址是 2200:FC到FD ; 内容是 2F 31

程序截图:

注意:push,pop修改的是栈,即ss和sp 。

 pop ax并不是弹出ax,而是将栈顶元素弹出并传给ax,且需注意入栈时候栈顶指针上移,即sp-2(此时ax入栈,有两个字节),出栈sp+2. 不能混淆两者、

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

(2) 仔细观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

可能要再做些实验才能发现其中的规律。如果你在这里就正确回答了这个问题,那么要恭喜你,因为你有很好的悟性。大多数的学习者对这个问题还是比较迷惑的,不过不要紧,因为随着课程的进行,这个问题的答案将逐渐变得显而易见。

分析:程序截图

由于程序段和上面类似,就不单步分析了,大概说一下:

在2000h创建栈结构,令ss:sp指向2000:10

给ax赋值并压入栈中

之后再查看d 2000:0发现内存中有数据了

可以看出这是压入栈中ax;

这是cs:ip值;

通过查看其它博客知道这是由于中断的原因,由于笔者能力有限,暂时无法进行解释,等以后了解这方面的内容再来补充。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ps:实验二到这里就完成了。

有个小问题想请教一下,

用a命令时 为什么输入“a cs:ip”提示错误,而“a cs:100”就可以呢?百度了也没找到答案,求指教!

附图:

原文地址:https://www.cnblogs.com/zwHou/p/9865200.html

时间: 2024-10-10 14:14:43

《汇编语言》实验二课程的相关文章

汇编语言实验二

一.使用Debug,将下面的程序段写入内存,逐条执行. 用a命令将指令段写入内存 用r命令改写CS:IP使其指向2000::0内存单元 用t命令执行指令 结果如图 二.观察图3.19中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变 根据图,用命令a将指令输入内存单元 可能与栈的知识有关,大致为什么还是不了解,希望能得到解决. 实验总结与体会: 通过实验初步了解了栈的一些存储方式,和其存储形式.同时也逐渐熟悉了汇编语言的编写环境. 学习到了汇编语言如何设置第三方变量. 原

汇编语言 实验二

实验: 1)使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际情况来填空. ① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H  ② 将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021 mov  ax,0021 mov  ds,ax mov  ax,2200 mov  ss,ax mov 

软件工程课程——实验二

刚刚完成了实验二相关文件的提交,现在把此次实验进行一下小结. 本次实验要求采用Struts2框架 + MySQL数据库 + Eclipse本地开发环境实现一个可以进行CRUD操作的图书管理系统,并且部署到SAE云端环境. 我认为,此次实验极大程度地锻炼了学生们的抗压能力和心理承受能力. 之前的软件设计和算法以及数据结构课程都在使用C++语言,所以在进行Java Web开发时需要克服的第一个小难题就是语言.但是经过实验一表达式处理的训练,已经对Java语言形成了初步的认识,所以这点小困难可以克服.

汇编语言之实验二

实验2 用机器指令和汇编指令编程  (1)使用DEBUG,将上面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空. e 0021:0  0021:7  30H,31H,32H,33H,34H,34H,35H,36H,37H mov ax,0021 mov ds,ax mov ax,2200 mov ss,ax mov sp,0100 mov ax,[0]    ;ax= 3130 add ax,[2]    ;ax= 6462 mov bx,[4]    ;bx= 3534 add

【汇编语言】(王爽著第三版)实验二

实验二 实验任务(一) 实验前要求我们将书本P74的程序段按理论分析,将结果进行填空.之后用Debug,将该程序段写入内存,逐条执行之后, 根据指令执行后的实际运行的结果填空如下. mov ax,0021 mov  ax , ffff mov  ds , ax mov  ax , 2200 mov  ss , ax mov  sp , 0100 mov  ax , [0]                       ;ax=3130 add  ax , [2]                 

《汇编语言》实验五课程

实验1 将下面的程序编译链接, 用Debug加载.跟踪,然后回答问题 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 start: mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax pus

MySQL数据库实验二:单表查询

实验二   单表查询 一.实验目的 理解SELECT语句的操作和基本使用方法. 二.实验环境 是MS SQL SERVER 2005的中文客户端. 三.实验示例 1.查询全体学生的姓名.学号.所在系. SELECT Sname,S#,Sdept FROM S: 2.查询全体学生的详细记录. SELECT  * FROM S: 3.查全体学生的姓名及其出生年份. SELECT Sname,2011-Sage    /*假定当年的年份为2011年*/ FROM S: 4.查询选修了课程的学生学号.

信息安全系统设计基础实验二:固件设计

北京电子科技学院(BESTI) 实验报告 课程:信息安全系统设计基础 班级:1353 姓名:芦畅 傅冬菁 学号:20135308 20135311 成绩: 指导教师:娄家鹏 实验日期:2015.11.10 实验密级: 预习程度: 实验时间:15:30~18:00 仪器组次: 必修/选修: 实验序号:1 实验名称:实验一:Linux开发环境的配置和使用 实验目的与要求: 1.掌握程序的烧写方法; 2.能够实现Bootloader; 3.实现密码学中常见算法的固化. 实验仪器: 名称 型号 数量 嵌

信息安全系统设计基础 实验二固体设计 20135327郭皓 20135329 李海空

北京电子科技学院(BESTI) 实     验    报     告 课程:信息安全设计基础                         班级:1353 姓名:郭皓 李海空 学号:20135327  20135329 成绩:             指导教师:娄嘉鹏        实验日期:2015.11.10 实验密级:         预习程度:         实验时间:15:30~18:00 仪器组次:          必修/选修:            实验序号:1 实验名称: