汇编语言分析与编程

该实验涉及使用汇编语言编写程序,通过OllyDbg分析,找出数据段ARY数组中的最大数值并存储到MAX单元。实验过程包括在DOSBox中进行汇编、链接和执行,以及利用DEBUG进行程序调试。此外,还计算了1+2+3+...+100的和,结果显示为5050。
摘要由CSDN通过智能技术生成

汇编语言分析与编程实验
了解OllyDbg的基本使用方法。

实验内容
汇编书写hello world
数据段的ARY数组中存放有10个无符号数,试找出其中最大者送入MAX单元。算法分析:依次比较相邻两数的大小,将较大的送入AL中。每次比较后,较大数存放在AL中,相当于较大的数往下传。比较一共要做9次。比较结束后,AL中存放的就是最大数。
计算1+2+3+…+100 思考题,如果要将结果打印显示,该如何实现呢?

实验过程(包含实验过程中出现的问题及解决办法)
1.实验先用汇编语言在文本上编写hello world 语言再把文本名后缀改成 obj 文件 方便读入 在DEL环境中 使用 masm 指令 生成 asm 后缀的文件 在输入指令时要注意 只有在显示assembling 时才是表示成功
汇编语言如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在dosbox 汇编软件中 首先按照汇编指令挂载好虚拟盘d: 然后打开e:盘中的111 文件夹使用link 操作 生成了 exe 文件不断回车 然后直接打开exe 文件 输出:hello world
在这里插入图片描述
2.数据段的ARY数组中存放有10个无符号数,试找出其中最大者送入MAX单元
首先找到汇编代码 后缀改成 obj
汇编代码如下:
DATA SEGMENT
ARY DB 17, 5, 40, 0, 67, 12, 34, 78, 32, 10
MAX DB ?
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP (0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:STACK1, DS:DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET ARY ;SI指向ARY的第一个元素
MOV CX, 9 ;CX作循环次数计数
MOV AL, [SI] ;取第一个元素到AL
LOP: INC SI ;SI指向后一个元素
CMP AL, [SI] ;比较两个数
JAE BIGER ;前一个元素大于后一个元素时转移
MOV AL, [SI] ;取较大数到AL
BIGER: LOOP LOP ;(CX)不等于0 则转移
MOV MAX, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END BEGIN

汇编代码如下 与上面的代码是一样的 方便粘贴
 DATA    SEGMENT 
    ARY DB  17, 5, 40, 0, 67, 12, 34, 78, 32, 10 
    MAX DB  ? 
DATA    ENDS 
STACK1  SEGMENT PARA    STACK 
    DW  20H DUP  (0) 
STACK1  ENDS 
CODE    SEGMENT 
ASSUME  CS:CODE, SS:STACK1, DS:DATA 
BEGIN:  MOV AX, DATA 
    MOV DS, AX 
    MOV SI, OFFSET  ARY ;SI指向ARY的第一个元素 
    MOV CX, 9       ;CX作循环次数计数 
    MOV AL, [SI]        ;取第一个元素到AL 
LOP:    INC SI      ;SI指向后一个元素 
    CMP AL, [SI]        ;比较两个数 
    JAE BIGER       ;前一个元素大于后一个元素时转移 
    MOV AL, [SI]        ;取较大数到AL 
BIGER:  LOOP    LOP     ;(CX)不等于0 则转移 
    MOV MAX, AL 
    MOV AH, 4CH 
    INT 21H 
CODE    ENDS 
    END BEGIN

在改了后缀后与上部分操作一样,生成 asm 文件 在dosbox 操作 也与上一部分操作一样
使用link 操作后生成exe 文件 然后运行 但是运行后不会显示最大值 可以使用 debug 调试 使用 -t 单步调试 出现 nop

在这里插入图片描述
也可以 d指令 查看指定单元内容4E 表示 是78 最大值

在这里插入图片描述

实验 三:计算1+2+3+…+100
首先 用汇编语言 书写 操作与上一次操作相同生成文件
在这里插入图片描述
在这里插入图片描述
在dosbox 中生成相应文件 输出结果十进制 5050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值