x86-16相关内容

如何测试输入字符是否在 1-9 之间?

我正在用 8086 汇编语言编写一个程序,该程序要求输入 1-9 之间的单个数字,然后将其存储.如果它不在 1-9 之间,则应该循环返回. 测试它并使其循环返回(并允许您输入另一个数字)直到满足要求的好方法是什么? 到目前为止我的代码: section .dataprompt1 db“输入 1-9 之间的一位数 --> $"节.text;显示提示移动啊,9;打印提示mov dx,pr ..
发布时间:2021-09-29 19:42:52 其他开发

为什么中断 int 21h 在写入程序执行期间填充的字符串后忽略所有字符串?

我正在尝试打印两个 16Bit 值的总和,因此我正在计算总和,然后构建包含它的字符串,但问题是在我打印所述字符串后任何写入中断 mov ah,09 int 21h 完全被忽略了,我使用的是 emu8086,这是代码 org 100hmov ax,2000mov bx,3200添加 ax,bxmov si,offset 结果+5mov [si],'$'mov bx,10填:十二月移动 dx,0di ..
发布时间:2021-09-29 19:42:49 其他开发

使用 8086 汇编计算 10 的阶乘

我一直在尝试使用汇编语言来解决这个问题.问题是我不能存储 10 个!在 al 中,我的代码用于查找 5 的阶乘.如何存储 10 的结果!在寄存器中?当我找到 5 的阶乘时,我可以在 al 中清楚地看到结果,因为 120 可以存储在 al 中. 任何帮助将不胜感激. 这是我的 5 代码! org 100h.数据ANS 数据库 ?.代码主程序移动轴,@DATAMOV DS,AXMOV ..
发布时间:2021-09-29 19:42:46 其他开发

如何在 TASM 的程序中使用本地标签?

我写的很简单 .MODEL 小.堆栈 100 小时.数据liczba dw 0h利兹尼克 dw 0波特加 dw 1liczbaString dw ?浅黄色 db 26.代码程序:移动斧头,@DATAmov ds, ax调用 PobierzString呼叫 PetlaIteracjiZnaku;zwraca do axe pobraną liczbęPetlaIteracjiZnaku PROCm ..
发布时间:2021-09-29 19:42:44 其他开发

IDIV 汇编语言的问题

CX 等于 14AX 等于 16 IDIV CX 但不知为何在 AL 有 37 个.在该行之前没有错误或错误.我哪里做错了?谢谢!附言在 Emu8086 上写 解决方案 IDIV CX 将 32 位值 DX:AX 除以 CX>,将商存入AX,余数存入DX. 因此 IDIV 指令之前的 DX 的值很重要,您应该将 AX 符号扩展为 DX 使用 CWD 指令(在 IDIV 之前),或 ..
发布时间:2021-09-29 19:42:41 其他开发

创建局部变量后,如何使用 bp 访问堆栈上的元素?

我使用的是 NASM 8086.如何使用 bp 访问堆栈上的第三个和第四个元素?这是我的代码 mov ax, 1推斧头;堆栈中的第一个元素移动斧头,2;堆栈中的第二个元素推斧推 bp ;保存 bp 的旧值mov bp, sp ;将 bp 作为我们的参考点子 sp, 2 ;创建一个局部变量,它可以被[bp-2]访问mov bx,3推 bx ;堆栈中的第三个元素mov cx,4推 cx ;堆栈中的第 ..
发布时间:2021-09-29 19:42:38 其他开发

8086 asm 中 64 位数字乘以 32 位数字

我什至在启动问题的解决方案时遇到了问题.我曾尝试考虑乘法是重复加法算法,但无论我考虑什么算法,我似乎都专注于一个问题——8086 中的最大寄存器大小是 16 位. 数据段编号 1 dw 0102h,0304h,0506h,0708hnum2 dw 0102h,0304hres dw ?,?,?,?,?,?数据结束代码段假设 CS:CODE, DS:DATA开始:移动斧头,数据mov DS,ax ..
发布时间:2021-09-29 19:42:35 其他开发

输出中的奇怪垃圾

所以我使用 tasm 1.4 并且我正在制作一个程序来用较小的字母和数字组成大的 CS14.我运行了大约 1/4 的过程,在我的最后一条消息输出后出现了一些奇怪的东西,比如 hgweh26I^U%EYWGT#YWHSDWrite disk FullHSJETESRGDTFHGJ! 错误看起来像这样http://s18.postimg.org/h35196kop/TD2.png 这是我的 ..
发布时间:2021-09-29 19:42:32 其他开发

顶部带有 %include 的组件 - 打印输出意外结果:只是一个""

我对汇编编程比较陌生,想知道为什么我的代码不打印预期的字符串.这个项目在完成后应该是一个引导加载程序.我正在使用命令 nasm -f bin boot.asm -o boot.bin 进行编译.编译时没有错误. boot.asm 位 16组织 0x7C00%include “print.asm"%include “text.asm"引导:mov si, boot_string_00电话打印 ..
发布时间:2021-09-29 19:42:29 其他开发

即使我确实为变量设置了初始值,数据段也没有被初始化

我已经编写了一个代码,它应该生成某种数字列表,但是即使我为它们分配了初始值,我的数据段变量也没有被初始化? 这是我运行 DS:0000 时的样子: 这是我的代码,但数据段只保留垃圾值: MODEL 小堆栈 100 小时数据段尺寸 1 dw 0000harr dw 20 dup(0000h)数据结束代码段假设 CS:CODE, DS:DATAsidra_rekursivit procm ..
发布时间:2021-09-29 19:42:27 其他开发

8086 汇编中更快的键盘扫描码检测

是否可以比仅从硬件端口 60h 读取更快地检测和收集键盘品牌和刹车? 每当我按下一个键时,比如说'W'键,然后很快地按下另一个键,'W'键的中断代码仍然由端口60h返回. 在我正在编写的游戏中,当用户试图快速改变方向时,这具有将玩家精灵锁定到位的效果. 我曾尝试将 int 16h 函数 01h 和 int 16h 函数 00 一起使用,但与端口 60h 相比,它非常不稳定且缓慢. ..
发布时间:2021-09-29 19:42:21 其他开发

DOS int 21/AH=9 的常量返回值背后的基本原理是什么?(打印字符串中断)

我在此处查看 DOS int 21h 中断的规范 http://spike.scu.edu.au/~barry/interrupts.html 我不太了解汇编,但似乎 AL 寄存器是存储中断返回值的标准.例如,服务 01h(读取字符)将读取的字符存储在那里.服务 02h(将字符写入标准输出)将最后一个字符输出存储在那里. 但是当谈到 AH=09h(将字符串写入标准输出)时,返回值总是 ..
发布时间:2021-09-29 19:42:18 其他开发

为什么变量名是“name"不允许在程序集 8086 中使用?

当我尝试声明一个名为“name"的变量时,它不起作用,它给了我一个错误,这个有错误.有以下解释 (22) 错误的参数:MOV BL, name(22) 十六进制可能没有零前缀;或没有“h"后缀;或地址错误;或未定义的 var: name 这是我的代码 ;多段可执行文件模板.数据段;在此处添加您的数据!pkey db "按任意键...$"名称数据库“我的名字"结束堆栈段dw 128 重复 (0 ..
发布时间:2021-09-29 19:42:15 其他开发

如何使用 DOSBox 中的汇编程序消除字符串中的空格和标点符号?

我试过了,但它给了我一个错误: 遇到意外的文件结尾 ;程序p02.asm.MODEL小.stack 100h.数据源数据库“STRING,WITH.标点符号:和 * 空格!$"辅助数据库"".代码移动斧头,@datamov ds, ax;删除除大写字母以外的所有内容.mov si, 偏移源;指向字符串.mov di, 偏移辅助;指向辅助.L1:移动, [ si ] ;从源中获取字符;检查是 ..
发布时间:2021-09-29 19:42:12 其他开发

如何在汇编中从用户输入多位数?

我需要找到一个可以从用户那里接收超过 1 位数字的中断.;代码 mov [0],0mov si,0洛普:移动啊,121 小时cmp al,'q'已完成输入异或啊,啊添加 [word ptr si], ax跳绳完成输入: 我已经尝试做一个无限循环,每次都使用 mov ah,121 小时 组合.当用户按下“q"时,无限循环停止.然而,我几乎确信我看到过一段用中断来做同样事情的代码. 我想 ..
发布时间:2021-09-29 19:42:09 其他开发

如何在 x86 程序集中正确索引数组

我正在努力确保我了解 SI 和 DI 寄存器.我在汇编语言方面的背景有些限制在 6502,所以请耐心等待. 我有一个关于如何使用 SI 作为简单计数器的快速示例.我有点担心我可能会滥用这个寄存器. mov si, 0 ;将 si 设置为 0mov cx, 5 ;将 cx 设置为 5,因为我们将倒数到 1做:动啊, 02h ;setup 02h DOS 字符输出中断mov dl, [tabl ..
发布时间:2021-09-29 19:42:07 其他开发

将整数转换为字符串程序集 8086 tasm

我正在使用带有 tasm 汇编器的汇编 8086 16BIT.我正在尝试打印一个 int 变量,为此我需要将我的变量 contant 转换为字符串.我试图建立一个程序,但没有成功.它完全错误并且不起作用. 你能帮我构建这个/解释如何构建这个吗? 谢谢各位! 这是我现在的基本代码: stepCounter db 0推偏移 stepCounter ;将“参数"的OFFSET复制到堆 ..
发布时间:2021-09-29 19:42:04 其他开发

检查数字是奇数还是偶数(数学奇偶校验)

对于一位数,我想知道它是奇数还是偶数(2 的倍数).例如,给定 9,打印它是一个奇数. (即检查数学奇偶性,而不是计算parity.) 这就是我所拥有的: 假设 cs:cseg,ds:dseg,ss:ssegcseg段开始:mov ax, dsegmov ds, ax移动啊, 01h ;在这里,我添加了一个数字21 小时jp偶jnp 奇数甚至:移动啊,09铅 dx,par21 小时 ..
发布时间:2021-09-29 19:42:00 其他开发

在 8086 中使用 16 位寄存器操作 32 位数字

我正在尝试编写一个程序来获取两个 6 位十进制数并显示它们的相加,但是在 16 位 8086我将数字定义为双字并将 LO 放在字 1 中,将 HO 放在字 2 中.类似于下面的代码但我不知道接下来要做什么,有人可以建议我下一步操作的算法吗?谢谢 x dd(?)next_no:mov cl,2mov ch,4二位:获取sub al,30hmov bl,10倍数mov di,ax添加单词 ptr x ..
发布时间:2021-09-29 19:41:57 其他开发