在汇编中生成随机数

2024-01-18

我是汇编新手,在生成随机数时遇到问题。

我的代码很简单:它在中生成 100 个数字0-25范围并将它们存储在数组中。

我遇到的问题是,当我在emu8086汇编程序成功运行并生成 100 个随机数,并将其存储在数组中。但是当我在masm611,每4个周期生成一个新的随机数。这意味着数组中的值是 4 个值的连续相同数字,然后存储下一个随机值。

这是我的代码:

.model small
.stack 100h
.data

range db 25
i db 0                  ;iterator

arr db 15 dup(0)        ; an array

.code
   mov ax,@data
   mov ds,ax

   mov bx,offset arr    ;getting the adress of the arr in bx
    L1:

    mov ah,2ch      
    int 21h

    mov ah,0  
    mov al,dl            ;using dl by seeing  2ch details
    div range            ; so the number is in range


    mov [bx],ah          ;ah has remainder as using 8 bits div and  
    inc bx               ;moving to the next index

    inc i
    cmp i,100
    jbe L1


mov ah,4ch               ;returning control
int 21h 
end

我的代码有问题吗?我需要添加一些东西吗?谢谢。


您的代码的主要问题是它根本不生成随机数。因为系统时钟不是随机数发生器。我想说,它是非常非随机的数字生成器。

程序启动后的第一次读取仍然可以被视为“随机”,但前提是您在随机时刻手动运行程序。

接下来的所有数字都不是随机的。

这样,从系统时钟读取的值适合用作生成(伪)随机数的某些其他算法的种子(起始值)。

随机(和伪随机)数生成器是一个复杂的主题,需要一些研究。至少开始于维基百科 https://en.wikipedia.org/wiki/Pseudorandom_number_generator.

顺便说一句,尽管整个主题很复杂,但一些随机数生成器足够简单,可以由初学者程序员实现。例如中平方法 https://en.wikipedia.org/wiki/Middle-square_method。尝试用汇编语言实现它,将当前种子 AX 与其自身相乘,并用结果的中间 4 个十六进制数字形成下一个数字:

; here ax contains the previous number

    mul ax
    mov al, ah
    mov ah, dl 

; here ax contains the next pseudo random number.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在汇编中生成随机数 的相关文章

  • 如何将 x86 GCC 风格的 C 内联汇编转换为 Rust 内联汇编?

    我在 C 中有以下内联汇编 unsigned long long result asm volatile byte 15 byte 49 shlq 32 rdx orq rdx rax a result rdx return result
  • 如何使用movntdqa避免缓存污染?

    我正在尝试编写一个 memcpy 函数 该函数不会将源内存加载到 CPU 缓存中 目的是避免缓存污染 下面的 memcpy 函数可以工作 但会像标准 memcpy 一样污染缓存 我正在使用带有 Visual C 2008 Express 的
  • 在哪里可以获得几乎所有英语单词的列表? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想生成一些随机文本 我尝试写一个基本的Java程序 int nowords r nextInt 2000 int i j for i 0
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • 样本()和r样本()有什么区别?

    当我从 PyTorch 中的发行版中采样时 两者sample and rsample似乎给出了类似的结果 import torch seaborn as sns x torch distributions Normal torch tens
  • FreePascal x64 上系统单元函数的汇编调用

    我有一些 Delphi 汇编代码 可以在 Win32 Win64 和 OSX 32 上编译并正常工作 XE2 但是 由于我需要它在 Linux 上工作 所以我一直在考虑编译它的 FPC 版本 到目前为止 Win32 64 Linux32 6
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • Visual Studio 2012 本机 C++ DLL x86 编译

    我最近将我的工具集从 Win 7 x86 Visual Studio 2010 升级到 Win 8 x64 Visual Studio 2012 但是 现在我的本机 C dll 编译为 x64 而不是 x86 除了将代码移至新操作系统并将其
  • GCC的sqrt()编译后如何工作?使用哪种root方法?牛顿-拉夫森?

    只是对标准感到好奇sqrt 来自 GCC 上的 math h 我自己编码的sqrt 使用牛顿拉夫森来做到这一点 是的 我知道 fsqrt 但CPU是如何做到这一点的呢 我无法调试硬件 现代 CPU 中的典型 div sqrt 硬件使用 2
  • 简单 Haskell Monad - 随机数

    我正在尝试扩展代码这个帖子 https stackoverflow com questions 3944170 haskell and state 接受的答案 允许我能够基于以种子作为参数的函数 randomGen 调用 randomGen
  • 为什么我的代码显示垃圾?

    当我也想打印列表中的每个数字时 我的代码显示垃圾 有什么问题吗 输出应如下所示 给定的数组是 2G 4 PT为什么这是垃圾总数是 7 Code ASSUME CS CODE DS DATA SS STK ORG 0000H DATA SEG
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 一段 R 代码会影响 foreach 输出中的随机数吗?

    我使用运行模拟foreach and doParallel并与随机数 名为random在代码中 简而言之 我模拟一个足球联赛 随机生成所有比赛的获胜者以及相应的结果 在dt base没有比赛进行 在dt ex1 and dt ex24场比赛
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • 英特尔的最后分支记录功能是英特尔处理器独有的吗?

    最后分支记录是指存储与最近执行的分支相关的源地址和目标地址的寄存器对 MSR 的集合 它们受英特尔酷睿 2 英特尔至强和英特尔凌动处理器系列的支持 http css csail mit edu 6 858 2012 readings ia3
  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw
  • Clang 编译器 (x86):80 位长双精度

    我正在尝试在 x86 Windows 平台上使用本机 80 位长双精度 海湾合作委员会选项 mlong double 80 https gcc gnu org onlinedocs gcc x86 Options html似乎不适用于 cl

随机推荐

  • A:边缘焦点解决方法

    我目前正在使用伪选择器 focus within in chrome 但是根据caniuse com https caniuse com feat css focus within它在 Edge 和 IE 中不可用 我找到了一个巧妙的解决方
  • 亚马逊 DynamoDB 和 AngularJS

    因此 我创建了一个 AWS dynamoDB 表 数据库 并准备使用 AngularJS 获取该数据 我如何使用 AngularJS 做到这一点 我需要在亚马逊设置其他服务吗 或者我可以直接访问我的数据库吗 我无法直接找到与 DynamoD
  • SpringBoot 2.0.2.RELEASE 中的 BCryptPasswordEncoder 定义

    我有一个基本的 Spring Boot 应用程序 使用 Spring Initializr JPA 嵌入式 Tomcat Thymeleaf 模板引擎 并打包为可执行 JAR 文件 我定义了这个配置文件 Configuration Enab
  • 使用 glDrawArrays 绘制交错的 VBO

    我目前正在使用 glDrawElements 使用多个 VBO 顶点 颜色 纹理和索引 进行渲染 我发现很少有顶点是共享的 所以我想切换到 glDrawArrays 和单个交错的 VBO 我一直无法找到一个清晰的例子 1 创建一个交错的 V
  • 如何以编程方式确定该类是案例类还是简单类?

    如何以编程方式确定给定的类是案例类还是简单类 使用新的 Scala 反射 API scala gt class B v Int defined class B scala gt case class A v Int defined clas
  • 透明跳脸?

    我一直在开发一个在 Three js 库之上运行的 WebGL 项目 我正在渲染几个半透明网格 我注意到根据倾斜相机的角度 顶部会出现不同的对象 为了说明这个问题 我使用三个半透明立方体做了一个快速演示 当您将图像旋转到垂直于屏幕的方向时
  • 如何在 Android 上使用 Jackson 将 JSON 数组解析为不同的对象?

    我正在尝试使用 Android 上的 Jackson 将如下所示的 JSON 解析为对象 注意 我无法控制 JSON 格式 该格式来自 Yammer references type user id 12345678 name Wex typ
  • 在 gitlab 中存储 API 令牌的安全方法

    我正在研究这个小terraform使用的项目gcp 谷歌云平台 token json其中包含创建资源的安全凭据 Terraform 文件由 Gitlab CI CD 执行 我担心的是 这个token json由其中之一使用terraform
  • 与 CVS 存储库同步时,Eclipse 可以忽略 .cvsignore 文件吗?

    我正在一个团队环境中工作 其中不同开发人员的 IDE 混合在一起 有些使用 Eclipse 有些使用 NetBeans 有些使用 IntelliJ 等 代码项目都是围绕 Maven 构建的 所以没有人关心你使用哪个 IDE 只要它可以与 M
  • 使用 Gson 序列化匿名类

    有什么原因无法将匿名类序列化为 Json 吗 Example public class AnonymousTest private Gson gson new Gson public void goWild this callBack ne
  • 如何在 PM2 启动之前(之前)需要 dotenv/config 文件

    我像这样运行节点应用程序 node r dotenv config dist app 我需要使用 PM2 类似的东西 pm2 start r dotenv config dist app js name appname doesn t wo
  • 如何使用javascript下载文件?

    我希望能够在按下按钮时下载给定的文件 该文件将通过API现在 我将其保存在本地存储中 所以我的文件夹是这样的 rootFolder JS file HTML file download file sample csv 如何创建下载link
  • 在我更改 'inheritFromWidgetOfExactType' 后,我开始收到 3 个不同的新错误

    3 个新错误是 错误 没有名称为 shadowThemeOnly 的命名参数 上下文 找到了该候选人 但参数不匹配 错误 没有为该类定义 getter addressOf 当我收到以下原始错误时就开始了 错误 未为类 BuildContex
  • 使用不同工具链存档时,Xcode 不支持“Enable Bitcode=YES”

    我已将 启用位码 设置为YES在我的构建设置中 当我使用默认工具链在 Xcode 9 2 中存档我的框架时 然后运行命令检查位码是否在二进制文件中otool arch arm64 l MyFrameworkBinary grep LLVM
  • 我很好奇 ldc 在 JVM 中的缩写是什么?

    ByteCode ldc将一个单字常量压入操作数栈 ldc 采用单个参数 它是要推送的值 JVM中的大部分字节码都可以通过代码描述得知它们的名称 然而 ldc 我没有看到任何线索 它是负载常数 它将常量池中的一项加载到堆栈上 可用的类型有
  • Xamarin 形式的 iPhone X 中的额外底部和顶部空间

    我使用 XAML 进行 UI 设计 我的应用程序在 Iphone X 设备上运行良好 Iphone X 中唯一的问题是顶部和底部有额外空间 如果我使用下面的代码来启用 Iphone X 安全区域 它会在底部和顶部获得更多空间 On
  • 无法删除 matplotlib polycollection 中的原点

    我尝试了 matplotlib 教程中的 PolyCollection 示例 并注意到一件奇怪的事情 我无法从轴原点删除这个点 见图 我该如何处理这个问题 from mpl toolkits mplot3d import Axes3D fr
  • 如何从原生 php 转换为 codeigniter

    我有以下数据库和PHP 我正在尝试制作类别菜单的无序列表 原来的 php 是自己工作的 我正在尝试将其转换为 Codeigniter 中的 MVC 以下是我到目前为止所得到的结果 但无法正常工作 如果有人能指出我做错了什么 我将不胜感激 D
  • SQL:如何从单个列中选择满足多个条件的单个 id(“行”)

    我有一个非常窄的表 user id ancestry user id 列是不言自明的 祖先列包含用户祖先的国家 地区 一个用户可以在表上拥有多行 因为一个用户可以拥有来自多个国家 地区的祖先 我的问题是 如何选择祖先来自多个指定国家 地区的
  • 在汇编中生成随机数

    我是汇编新手 在生成随机数时遇到问题 我的代码很简单 它在中生成 100 个数字0 25范围并将它们存储在数组中 我遇到的问题是 当我在emu8086汇编程序成功运行并生成 100 个随机数 并将其存储在数组中 但是当我在masm611 每