- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很擅长 M68000,但 X86 对我来说很难。我正在尝试用 MASM 组装这个简单的程序
.MODEL SMALL
.data?
ONE dB ?
TWO dB ?
stack db 100 dup(?)
.data
MSG db 13,10, 'Enter deree of polynomials: $'
MSG2 db 13,10, 'Enter coefficient of x^ $'
MSG3 db 13,10, 'The polynomial created is: $'
MSG4 db 13,10, 'The first derivative is: $'
STR1 db 255 DUP('$')
.code
_start:
mov ax, offset MSG
mov ds, ax
end _start
我不断收到错误符号 MSG 的未知重定位类型 (1)。我知道这是什么(当位移大于模型允许的位移或类似的东西时会发生这种情况)但我不知道如何解决这个错误(我知道 MASM 是一个 32 位汇编器,我正在尝试编写一个16 位代码)。我要做的是将指向 .data 的指针加载到 ds 寄存器中。
我用MASM32 IDE生成的makeit.bat
是:
@echo off
if exist "derivative 1.obj" del "derivative 1.obj"
if exist "derivative 1.exe" del "derivative 1.exe"
\masm32\bin\ml /c /coff "derivative 1.asm"
if errorlevel 1 goto errasm
\masm32\bin\PoLink /SUBSYSTEM:CONSOLE "derivative 1.obj"
if errorlevel 1 goto errlink dir "derivative 1.*" goto TheEnd
:errlink
echo _
echo Link error
goto TheEnd
:errasm
echo _
echo Assembly Error
goto TheEnd
:TheEnd
pause
最佳答案
MASM32 包不支持生成 16 位可执行文件,尽管改变这种行为并不难。 MASM32 包中的MASM 汇编器将生成 16 位代码,但提供的链接器不会生成 16 位可执行文件。这会导致您看到的错误类型。
您可以下载支持 16 位目标的旧链接器的副本。我做了 link16.exe (1994 年 12 月 5 日版本 5.60.339)可在我的服务器上下载。
将 link16.exe
放入 \masm32\bin
目录。您必须修改生成的 makeit.bat
文件。调用链接器的行(如 link.exe
或 polink.exe
)必须替换为:
\masm32\bin\link16.exe "filename.obj" ;
filename.obj
是您要链接的文件的名称。更改它以适合您的项目。末尾的分号将默认所有文件名并且不会提示输入它们。然后,您必须修改 makeit.bat
中的 ml
行,这样它就不会生成 coff
文件。为此,请删除 /coff
选项:
\masm32\bin\ml /c "filename.asm"
同样,filename.asm
可以替换为项目中的文件名。
一旦您能够生成 16 位可执行文件,您的代码就会出现一些问题:
删除 stack db 100 dup(?)
并改用 .stack
指令
.stack 100h
您需要在 DS 中设置 MSG
的段值:
mov ax, seg MSG
mov ds, ax
对于 .small
模型,只有一个 data
段。在 .small
模型中,.data
和 .data?
将合并为一个 .data
段。使用此内存模型,您还可以通过以下方式初始化 DS:
mov ax, @data
mov ds, ax
对于 DOS EXE 程序,您需要使用类似于 DOS exit interrupt 的命令退出。
mov ax, 4c00h
int 21h
如果您在 64 位版本的 Windows 上使用 MASM32,您将无法直接运行您创建的 16 位应用程序。你必须下载一个模拟器,比如 DOSBox运行它,或安装具有可以运行代码的 DOS/Windows 版本的虚拟机(VMWare、VirtualBox、QEMU 等)软件。
关于assembly - MASM 错误 Unknown relocation type (1) with 16b code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47439100/
我正在编译 linux-4.19(gcc-8.2 bintutils-2.31),但是它总是失败并出现如下错误: aarch64-oe-linux-ld.bfd: drivers/platform/g
我在 Macbook Pro 上的 VirtualBox 上运行 Ubuntu 14.04 64 位 MAC。我在 hello_kernel.c 中有以下内容,我想运行它。 #include #in
这是我在 AArch64 上遇到的问题的简化版本: 我有一个宏,可以不断地将一些数据转储到一个部分中。 #define GEN_DATA(_type) \ .pushsection .mydat
我们已经将我们的 subversion 存储库移到了不同的服务器上。我跑了svn swtich --relocate将我的开发工作站存储库更改为新位置。 问题是它看起来像它工作,因为没有报告错误消
这是一个与u-boot相关的基本问题。 为什么 u-boot 代码会自行重定位? 好的,如果 u-boot 是从 NOR-flash 或引导 ROM 空间执行是有道理的,但如果它已经从 SDRAM 运
我们的 svn 存储库的位置已更改为不同的 url,此外主干、分支和标签的相对路径也移动了一点。现在,当我尝试 svn relocate 时,我收到此消息。 无效的重定位目标:'https://my-
当有人这样做时 svn switch ,我知道它将工作目录切换到目标路径。 我想了解 --relocate 的用途。我认为这仅在存储库的 url 发生更改并且想要更新工作副本 url 以指向新的
我正在尝试将工作副本文件夹从旧的专用 svn 服务器移动到新的 svn 服务器,其中包含子文件夹。使用以下重定位命令: svn switch --relocate https://oldserver/
我想用 gfortran 创建一个共享库,出于可移植性的原因将它与静态版本的 libgfortran 链接起来。不幸的是,我没有设法适本地链接不同的对象。我已经找到一些解决类似问题的帖子,但我不知道如
我的应用旨在在 android 6 上运行,据我所知,它不允许加载共享库。 有没有人遇到过这个问题并且能够成功解决? java.lang.UnsatisfiedLinkError: dlopen fa
在我的 Debian x86 32 位中,当我执行 readelf -r/usr/lib/libstdc++.so.6 | grep pthread,我得到这个输出: 000eceac 000062
我想知道为什么某些 Windows 可执行文件确实有重定位。与 DLL 不同,当可执行文件始终可以加载到任何虚拟地址时,为什么需要它? 最佳答案 是的,EXE 中的重定位是可选的,可以去除。但如果我们
我无法在我的 linux 电脑上编译任何东西。我不知道为什么,可能是我安装了一些软件包并弄得一团糟。我已经卸载并重新安装了 gcc 和其他软件包,但没有好消息.. 仍然是这个问题。 这是消息: /us
我正在 Nexus 5 上测试 Android 6.0,我正在使用 Metaio(我知道该服务将于 12 月 15 日结束,但在那一天我们将转移到另一个 AR 平台)。问题是当我启动 ARActivi
我正在尝试将静态库链接到共享库,但出现以下错误 /usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(fileappender.o): re
如果你做 dumpbin/header 它会给你所有 7 个部分的数据转储。 。数据 .idata .rdata .reloc .rsrc 。文本 .textbss 其中 .rsrc 和 .idata
这个问题的变体已被问过很多次,但没有一个答案阐明我感兴趣的内容: 我想(显然...:) 将我的本地工作副本与两个不同服务器上的两个存储库同步。如果我将 svn switch 与 --relocate
我正在尝试为ATmega328 micro编译一些代码,并且我想使用Arduino的库和核心。我正在使用CMake。我已经编译了核心库和代码的所有对象以及Arduino的库。但是,当链接时,它们向我显
我是这个社区的新手,因为我以前从未创建过帐户并提出过问题,但我一直使用这个网站来解决我的编程难题。所以谢谢!不过这一次,我找不到另一个符合我确切需求的问题。如果重复,我深表歉意。 我使用的是 elem
鉴于我已经编译了一些 unix 程序,我可能需要做些什么来将它重新定位到不同的目录并让它继续正常运行。 我正在考虑 Perl,但对其他系统(如 Apache)感兴趣,这些系统在完成后似乎也会失败。为了
我是一名优秀的程序员,十分优秀!