微机分支程序结构程序设计出现的问题及解决办法

微机分支程序结构程序设计出现的问题及解决办法,第1张

微机分支程序结构程序设计出现的问题及解决办法:

一、实验内容

熟悉循环结构设计与调试

题目1要求:从NN单元开始的10个连续单元中存放有10个无符号数,从中找出最小的送入MM单元中。

流程图:

选做题要求:试编写一程序,要求比较两个字符串SREING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NOMATCH”.

二.实验步骤橘和

1.将MASM文件夹复制到D:盘根目录下

2.将编好的代码复制到MASM文件夹中,扩展名改为’.asm’

3.搭建DOSBox-汇编环境

4.mount c: d:\wmasm 回车后键入C:,回车

5.对源文件进行汇编

c:\masm xff1228.asm回车

连续输入三个回车(若提示有错误返回源文件修圆亮盯改并重复此步骤)

6.对目标文件进行链接

c:\link xff1228.obj回车

连续键入三个回车键贺

7.运行程序

c:\xff1228.exe回车

8.调试程序

DATASEGMENT

ARY DW 025AH,1357H,776H,0040H,05C3H,36D0H,720FH,082AH,019DH,0124H

ORG 0050H

MAX DW0

DATAENDS

CODESEGMENT

ASSUME CS:CODE, ES:DATA

ORG 100H

START: MOV CX, 9H 循环次数=数据个数-1

MOV AX, SEG ARY

MOV ES, AX

LEA SI, ARY

MOV AX, ES:[SI]最大值初值

SCHMAX: ADD SI, 2

MOV DX, ES:[SI]

CMP DX, AX

JLE NEXT

MOV AX, DX

JMP NEXT

NEXT: LOOP SCHMAX

FINISH: MOV ES:[MAX], AX

INT 3 暂停,以便查看运行结果

CODEENDS

END START

编译链接生成exe文件, 在Win7的DOS环境用Debug运行通过;

运行结果,找到这10个数的最大值并保存到max单元中,

在Debug中枣码兄,模行运行至INT 3 暂停,可用 D ES:0050 命令查凳袭看到该最大值。

下面是一份 x86-64 汇编代码段,可以实现将 RDX 和 RAX 中的 128 位数据逻辑左移一位(即将高位移到低位,低位填 0)的功能。代码中使用了 64 位裂敬慎寄存器 RDI 来存储左移 *** 作的结果。

将 RDX 和 RAX 中的 128 位数据逻辑左移一位,结果存放在 RDI 中

参数:无

返回值:无

section .text

global _start

_start:

将 RAX 的最高位保存到 CF 标志位中

shr rax, 63

将 RDX 的最高位保存到 RAX 的最低位,并将 RAX 的最高位保存到 CF 标志位中

rcl rdx, 1

将 RAX 的最低位保存到 RDX 的最高位

rcr rax, 1

将 RDI 中的数据清零

xor rdi, rdi

将 RDX 和 RAX 中的数据合并,存储到 RDI 中

or rdi, rdx

or rdi, rax

程序结束

mov eax, 1

xor ebx, ebx

int 0x80

代码中使用了 shr(算术右移)和 rcl(循环左移)指令将 RAX 和 RDX 中的数据逻辑左移一位,并将结果存储到 RDI 中肆敬。其中,shr rax, 63 的作用是将 RAX 中的最高位保存到 CF 标志位中;rcl rdx, 1 的作用是将 RDX 中的最高位保存到 RAX 的最低位,并将 RAX 的最高位保存到 CF 标志位中;rcr rax, 1 的作用是将 RAX 的最低位保存到 RDX 的最高位。最后,使用 or 指令将 RDX 和 RAX 中的数据合并,并存储到 RDI 中。

需要注意的是,在本稿念示例中,假设 RAX 和 RDX 中的数据都是无符号整数。如果数据是带符号的,需要考虑符号扩展的问题。此外,代码中也没有进行错误处理,如果输入的数据不符合要求,程序可能会出现异常行为。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12560630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存