x86-16相关内容

在装配中按值传递和按引用传递

我正在尝试解决这个问题: 创建一个 PROC 过程,该过程将一个参数作为按值传递,并根据作为参数传递的数字打印出"X"的数字. 在打印之前,请确保参数为正数,在程序结束时,您需要将已使用的寄存器改回其第一个值. 如果该过程的输入为5,则控制台上的输出应为: XXXXX 这是我的代码: var db 5 ;In the dataseg push [var] ;in ..
发布时间:2020-05-06 09:09:20 其他开发

将两个无符号的16位值相乘,而不使用乘法或除法指令[8086汇编]

我目前正在做一个分配,在其中编写一个子例程,其中将2个无符号数字相乘并在DX:AX对中产生结果.但是我不能使用mul,imul,div和idiv指令.当我运行代码时,下半部分(AX寄存器)总是正确的,但DX寄存器却不正确.谁能指出我做错了正确的方向? ;----------------------------------------------------------- ; ; Progra ..
发布时间:2020-05-06 09:09:14 其他开发

自定义键盘中断处理程序

我正在尝试编写一个简单的程序,该程序将用减少变量的自定义中断替换标准键盘中断.但是,如果不调用旧处理程序,它将无法正常工作.这是我的中断处理程序: handler proc push ax push di dec EF ;pushf ;when these to instructions commented keyboard interrupts handling ..
发布时间:2020-05-06 09:08:48 其他开发

组装开关小写字母用于大写字母,反之亦然

我试图创建一个汇编程序,同时将大写字母更改为小写字母,反之亦然. 例如: 输入为:您好,这是一个示例. 我想要 输出为:hELLO,这是一个示例. 我所能获得的只是将字符串更改为大写,即时消息我知道使用汇编程序8086和Microsoft宏汇编程序(MASM). 谢谢! 这是我的代码 stackseg segment para stack 'st ..
发布时间:2020-05-06 09:08:44 其他开发

汇编x86程序.计算输入中的数字

你好,我只是在学习汇编语言,所以我还不太了解. 我必须编写一个程序,用户在其中输入各种字母数字等的某种行.该程序应计算输入中有多少个数字并打印出计数器. 这是我的代码: .model small .stack 100h .data buffer db 100, ?, 100 dup (0) count db 0 .code s ..
发布时间:2020-05-06 09:07:23 其他开发

创建一个x86汇编程序,该程序将整数转换为0和1的16位二进制字符串

正如问题所示,我必须编写一个MASM程序将整数转换为二进制.我尝试了许多不同的方法,但是没有一个方法对我有任何帮助.我正在处理的最终代码如下.在 Visual Studio 中调试代码时,出现访问内存冲突错误. 任何有关如何解决该错误的帮助,以及我是否在正确的道路上,将不胜感激.第一个代码是我的C ++代码,该代码将char数组传递到.asm文件以转换为二进制文件. #include ..
发布时间:2020-05-06 09:07:08 其他开发

使用$符号将值赋给上一行中存在的变量

我试图理解MS-DOS v2.0 源代码,并且特别是 MSDATA.ASM中的某些代码.该代码最初是使用35年以上的MASM汇编程序(该版本尚未在市场上出售)进行汇编的.我感兴趣的代码即将开始: SUBTTL Initialized data and data used at DOS initialization PAGE ; DATA AREA for MS-DOS IFNDEF KA ..
发布时间:2020-05-06 09:06:41 其他开发

将变量添加到x86程序集中的堆栈中

我想知道如何在ASM的过程中设置局部变量? 谢谢! 解决方案 如果要在堆栈上存储变量,则需要为其保留空间,通常使用SUB ESP,xxx序列完成,其中是您要为其留出空间的“变量"的大小,与堆栈对齐对齐(通常为4个字节,也可以为8或16).该规则的唯一例外是变量位于寄存器中时,在这种情况下,您可以在该寄存器上执行PUSH. 此空间需要在函数退出时清理,因此,如果PUSH添加了寄存 ..
发布时间:2020-05-03 05:30:09 其他开发

linux引导代码如何用C编写?

我是学习OS开发的新手.从我读过的书中可以看出,引导加载程序会将第一个MBR复制到0x7c00,然后以实模式从那里开始. 并且,示例以16位汇编代码开头. 但是,当我查看当今的Linux内核时, arch/x86/boot 具有"header.S"和"boot.h",但是实际代码在main.c中实现. 这似乎对“不编写汇编"有用. 但是,这是如何在Linux中专门完成的呢? 我可以粗略 ..
发布时间:2020-05-02 03:28:10 其他开发

如何反汇编原始的16位x86机器代码?

我想反汇编我拥有的可引导x86磁盘的MBR(前512个字节).我已使用以下命令将MBR复制到文件中: dd if=/dev/my-device of=mbr bs=512 count=1 对可以反汇编文件mbr的Linux实用程序有何建议? 解决方案 您可以使用objdump.根据本文的语法是: objdump -D -b binary -mi386 -Maddr16,da ..
发布时间:2020-05-01 08:03:59 服务器开发

在DOS下使用Assembly在x86实模式下设置和重置键盘中断服务例程

如何正确设置然后重置DOS中的键盘ISR? (x86汇编,实模式,带TASM的16位) 我有以下汇编代码,该代码为键盘设置了ISR.它要做的就是每次按下一个键最多打印一次句子,最多五次.然后应该退出. 似乎正确安装了ISR.每按一次键,它将打印出一个句子(一次按下一次,一次按下一次).但是,由于我在运行该程序后无法在DOS命令行中输入文本,因此好像在错误地卸载了ISR. (我已经 ..
发布时间:2020-04-26 08:20:44 其他开发

当我按键盘上的键时如何防止重复的字符

我正在尝试学习如何防止键盘在DOS下向屏幕和scanf发送多个字符.我正在将Turbo-C与内联汇编一起使用. 如果在键盘上输入的字符是: mmmmmmmmyyyyy nnnnnaaaaammmmmmeeeeeeee iiiiiissss HHHHaaaaiiiimmmm 在控制台上看到并由scanf处理的字符为: 我叫Haim 基本输出来自 C 中的代码,我无法触摸 ..
发布时间:2020-04-26 08:03:57 其他开发

第一次按键后,我的游戏控制冻结,持续时间为int 16h/ah = 1

我正在用程序集8086编写游戏.我修复了游戏无法打开时的问题,但无法修复控件. ESC 键起作用.当我按下它时,它会进入 _QUIT 功能,但是如果在此之前按下任何其他键,控件将冻结并且不会对任何键做出反应. 我的功能有问题吗? 我试图将AL寄存器更改为AH,但是没有用. _KEYCHECK: mov ah,01h int 16h ..
发布时间:2020-04-26 08:02:11 其他开发

什么是细分,如何在8086模式下解决?

自从开始使用8086汇编语言编程以来,我就一直在思考这些段和段寄存器.我面临的问题是,我无法直观地看到脑海中有哪些细分,因此这些概念对我来说并不明确. 有人可以帮助我理解与现实世界相关的概念吗??我还有以下问题: 问题1: 据我了解,在启用20条地址线的16位实模式下,我们可以将物理内存分为16个段,每个段具有64KiB.第一段从0x00000开始.下一个分段的起始地址是什么.会 ..
发布时间:2020-04-25 11:16:36 其他开发

为什么这个汇编语言程序以相反的顺序打印十六进制数字?

我一直在关注如何编写操作系统的讲义,并且一直在掌握汇编语言,尤其是NASM。 (在这里讲课,感兴趣: https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf ) 首先要完成的任务之一是编写一个程序,该程序将在屏幕上打印一个16位十六进制数字的ASCII表示。 在下面的程序中,测试编号是'0x6bf1 ..
发布时间:2018-06-07 17:01:43 其他开发