问题标签 [tasm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 除法 8086/8087 1/3 =3?
我在使用时遇到了很大的问题fdiv
!!!!我正在尝试划分1/3
,所以这就是我所做的
如您所见,我将结果移至,resultado
因为我看不到结果st(0)
(我正在使用 tasm,所以我只能在调试器中看到变量)结果应该是3EAAAA3A
但我得到了40400000
......那是3
!!!这怎么可能??我尝试交换变量,但什么也没有!!!你能帮助我吗??=(
assembly - 8086 程序集 (TASM):将 ASCII 字符值显示为 HEX
** 为澄清和“更清洁”的代码而编辑。
我正在尝试从键盘接受一个字符(任何字符)并将其 ASCII 值转换为十六进制,然后显示它。
我知道如何从基数 10 转换为十六进制,但只是为了确保我没有使用不正确的术语:
如果我输入“c”作为我的 ASCII 值,它的十进制值为 63。63 除以 16(十六进制为 16 进制)= 3.9375。保存 3 的商以备后用。余数 * 基数 (.9375 * 16) = 15。15 是十六进制字符“F”。
商除以基数 (3 / 16) = 0.1875。商为零,所以这是转换的最后一步。余数 * 基数 (.1875 * 16) = 3
从后到前读取它们(“先进后出”,如果考虑堆栈),我得到“3F”作为十进制数“63”的十六进制值(这是“c”的ASCII)
这是正确的,是吗?
我希望它读起来很简单。我只是从键盘(AL)中获取字符,将 BX 设置为除数(以 16 为基数),然后将 AL 除以 BX,将余数存储在堆栈中,然后循环遍历堆栈并尝试显示它.. .
我认为我的问题是我的乘法和我的 INT 21H/02H 有问题。我不确定是否需要添加 30h 才能显示字符...
最重要的是,我什至不确定我是否需要在那一点(显示),因为我还没有弄清楚如何将 10-15 转换为十六进制的 AF。
我试着和我的老师说话,在等了 30 分钟让他完成和我班上另一群学生的谈话之后(关于他的另一个班的东西,而不是这个……这让我很恼火),我得到的最多的是“重新开始”。
当被问及“使用 SHR 和 SHL 怎么样?” 正如有人向我指出的那样,但有人告诉我,没有它也可以完成,而且我不能使用这些命令(课堂上没有介绍它们)。
关于我做错了什么的任何意见?谢谢!
已编辑**
我终于明白了!我能够让程序返回在键盘上按下的 ascii 字符的十六进制值,但它仅在每个余数为 0 到 9 时才有效。它不会显示 A 到 F,而是使用冒号,分号等...
我在网上查看了一个 Ascii/Deicmal/Hex 图表,注意到字符 0 到 9 是 30h 到 39h。但是字符 A(十六进制 10)直到 40 小时才开始。所以我改变了程序,如果该值大于 39h,它将 7h 添加到 DL 并显示它。
assembly - 8086 TASM 汇编器 - 循环时出错:“值超出范围”?
我在班上似乎总是落后于小组,我想为我班上关于循环的下一章“练习”。
我写了这个从 1 到 10,000 的小循环(我认为这需要一毫秒的时间来运行):
几分钟前我打错了零的数量,并破坏了程序。我想知道为什么会这样。
我收到了这个错误:
汇编文件:Loop.ASM
ERROR loop.ASM(15) 值超出范围。
ERROR loop.ASM(24) 值超出范围。
错误信息:2
警告信息:无
通过:
剩余内存:467k
经过一些谷歌搜索(并在阅读有关内存寄存器的书上摸索)后,事实证明存在 65,535 个字节的硬限制。这个对吗?如果有人想超越这个内存限制怎么办?有没有办法做到这一点?
只是对我来说似乎很奇怪......
assembly - 如何在 Tasm 中将字符串转换为数字?
我制作了一个读取字符串并将其转换为数字的程序。以十进制系统输入的数字的字符串表示形式。转换的结果在寄存器 ax 中。我用的是tasm16。
我该怎么做才能将字符串转换得更大(超过 65535)?
assembly - push in 16bit 的用法 - tasm
当我使用 push 指令时,我是推送 SUM 的引用还是值?调用 func 后 SUM 会发生变化吗?
assembly - 8086 ASM:Turbodebugger 打开文本文件,不能正常执行
我正在处理的 ASM 任务遇到了这个小问题。它就像一个魅力......当我使用 TD 时。由于我对大会真的很陌生,我真的找不到问题所在。
我需要在屏幕上打印 .txt 文件中每个 ASCII 码的字符数(多少个 a,多少个 b,等等)。我首先使用 int 21h/3dh 打开文件以创建句柄,然后缓冲一些字节,处理它们,并缓冲下一部分直到到达文件末尾。正如我所说,当我使用 TurboDebugger 运行它时,它运行良好。但是,当我简单地从命令行执行它时,它甚至不会创建文件句柄。它在3dh中断后设置CF,这意味着错误。
我真的真的认为我没有做我需要做的事情,我会很感激这方面的帮助。谢谢!顺便说一句,我正在使用 TASM 进行编译。我不认为发布我的一段代码会有帮助,但如果你不这么认为,我会很乐意修改帖子。
这是整个代码,对西班牙语的评论感到抱歉
貌似中断返回的错误码是5,意思是访问被拒绝……会不会是路径文件的原因??该文件位于我正在编译它的同一文件夹中,它是 F:\dos\tasm\a.txt 。顺便说一句,我正在使用 DosBox。
loops - 两个循环嵌套在 x86 程序集中的另一个循环中
我在汇编语言中循环出现问题。
当我们想在嵌套循环中使用计数器寄存器进行循环时,我们首先要做的是将计数器寄存器的值移动到外部循环的堆栈中,然后在内循环完成时将其取回,这样我们' re 能够使用一个计数器寄存器循环进入嵌套循环,每个循环具有不同的迭代次数。
但是嵌套循环中的嵌套循环呢?
我想打印一个由字符组成的金字塔S
。我得到的是,
我真正想要的是,
这是我的程序代码
为了达到我想要的效果,我需要在嵌套循环中添加另一个循环来打印空格字符(即 020H)。但为此,我需要另一个计数器寄存器,但我做不到。我怎么解决这个问题?
assembly - 在 DOS 中直接将文本读入堆栈
我正在学习汇编程序(16 位 DOS 上的 TASM)并尝试使用 0Ah DOS 服务将文本直接读入堆栈。它在 emu8086 中运行良好,而当我使用实际的 TASM 运行它时 - 它不提供任何用户输入(根本没有输入,似乎根本就跳过INT 21h
)。
这是我使用它的方式:
可能是什么问题?我是否以错误的方式引用堆栈?提前致谢。
这是完整的代码以防万一:
assembly - 汇编:32 位寄存器无法识别?
我正在尝试使用 32 位寄存器,因为我需要更大的最大整数值。当我尝试使用 EAX、EBX、ECX 或 EDX 时,TASM 显示 UNDEFINED SYMBOL。TASM 正在将寄存器作为变量读取。知道原因吗?我正在使用 DOSBOX 0.74 并在 Windows 7 64 位上运行。
assembly - better method for displaying result in Decimal - TASM
I wanted to write a program that adds two Numbers and show the result in Decimal form, initially it was looking a piece of cake but as it turned out, it wasn't !!! because there is just 0-9 characters in decimal and when we want to add any number greater than those we've to perform some mathematics,
Here is what i've done, I wanted to add two numbers 35 and 39,
35 + 39 = 74
I recovered both the numbers but now how to show the result as '74' ???
Also , this method is so time consuming, is there any better and more efficient way to do this ?