Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly DOSBox组件打印功能-8086 TASM_Assembly_Printing_X86_Tasm_Dosbox - Fatal编程技术网

Assembly DOSBox组件打印功能-8086 TASM

Assembly DOSBox组件打印功能-8086 TASM,assembly,printing,x86,tasm,dosbox,Assembly,Printing,X86,Tasm,Dosbox,我正在使用16位TASM编译器和DOSBox,我想知道如何在我的汇编代码中包含DOSBox打印功能。 我尝试做的与以下类似(不过这是NASM,我需要TASM,即与8086一起工作的东西): 除了搜索外部符号的不同指令外,NASM或TASM对这一点影响不大。这个NASM示例使用了clib中的printf实现,它是在链接最终可执行文件期间添加的。所以第一个问题是,你有没有16bc库可以链接?然后只需使用正确的TASM指令来搜索其函数,并使用16b clib的适当调用约定来调用它(我记不起任何16b实

我正在使用16位TASM编译器和DOSBox,我想知道如何在我的汇编代码中包含DOSBox打印功能。 我尝试做的与以下类似(不过这是NASM,我需要TASM,即与8086一起工作的东西):


除了搜索外部符号的不同指令外,NASM或TASM对这一点影响不大。这个NASM示例使用了clib中的
printf
实现,它是在链接最终可执行文件期间添加的。所以第一个问题是,你有没有16bc库可以链接?然后只需使用正确的TASM指令来搜索其函数,并使用16b clib的适当调用约定来调用它(我记不起任何16b实模式clib,即使在DOS时代即将结束的时候,一切都是32b保护模式,在DOS4GW这样的包装器下运行,可能是早期DOS时代的东西…)你很可能会发现一些更简单的IO 16b库(TASM本身不包括Borland的库吗?),成熟的
printf
是一种“大规模杀伤性武器”,可以实现很多功能,仅仅是它的实现可能需要几千字节的机器代码,你真的需要
printf
,或者您只是想输出静态字符串和一些整数值?然后您需要首先拥有该外部函数(库)。如果您没有,请检查您的TASM发行版,我有大约20%的信心Borland将简单IO库与之捆绑。我认为(50%的可能性)还有16b的真实模式Irvine lib(如果存在的话,现在已经过时了,因为Irvine大学开始在windows平台下教授32b的保护模式)。或者查看这里的x86标记信息页面,关于多位数值输出,这里有几个简单的“整数到字符串”代码的SO问题+答案,其中一些是直接针对TASM+DOS目标的(并将其作为内部函数添加到源代码中)。最后,我想emu8086可能包含一些内容,但实际上这不是免费软件,因此,如果你已经购买了TASM,那么可能是最没有吸引力的选择。。。“dosbox打印功能”-DOS或dosbox当然不包含此类功能,DOS提供的所有功能都在
int21h
中,BIOS在
int10h
中(大多数情况下,可能某些输出服务甚至在其他中断中,但肯定没有整数输出)。为了获得合理的速度,您应该直接写入视频内存,完全跳过BIOS/DOS,但文本不需要这样做(尽管我发现它仍然比DOS服务更方便)。@Ped7g:TASM不会提供任何这样的库,但TurboC/C++的16位版本会提供。C库将是文件
C?.lib
,C启动库代码将是
c0?.lib
,其中
是表示内存模型的字母。除了搜索外部符号的不同指令外,NASM或TASM不会对此产生太大影响。这个NASM示例使用了clib中的
printf
实现,它是在链接最终可执行文件期间添加的。所以第一个问题是,你有没有16bc库可以链接?然后只需使用正确的TASM指令来搜索其函数,并使用16b clib的适当调用约定来调用它(我记不起任何16b实模式clib,即使在DOS时代即将结束的时候,一切都是32b保护模式,在DOS4GW这样的包装器下运行,可能是早期DOS时代的东西…)你很可能会发现一些更简单的IO 16b库(TASM本身不包括Borland的库吗?),成熟的
printf
是一种“大规模杀伤性武器”,可以实现很多功能,仅仅是它的实现可能需要几千字节的机器代码,你真的需要
printf
,或者您只是想输出静态字符串和一些整数值?然后您需要首先拥有该外部函数(库)。如果您没有,请检查您的TASM发行版,我有大约20%的信心Borland将简单IO库与之捆绑。我认为(50%的可能性)还有16b的真实模式Irvine lib(如果存在的话,现在已经过时了,因为Irvine大学开始在windows平台下教授32b的保护模式)。或者查看这里的x86标记信息页面,关于多位数值输出,这里有几个简单的“整数到字符串”代码的SO问题+答案,其中一些是直接针对TASM+DOS目标的(并将其作为内部函数添加到源代码中)。最后,我想emu8086可能包含一些内容,但实际上这不是免费软件,因此,如果你已经购买了TASM,那么可能是最没有吸引力的选择。。。“dosbox打印功能”-DOS或dosbox当然不包含此类功能,DOS提供的所有功能都在
int21h
中,BIOS在
int10h
中(大多数情况下,可能某些输出服务甚至在其他中断中,但肯定没有整数输出)。为了获得合理的速度,您应该直接写入视频内存,完全跳过BIOS/DOS,但文本不需要这样做(尽管我发现它仍然比DOS服务更方便)。@Ped7g:TASM不会提供任何这样的库,但TurboC/C++的16位版本会提供。C库将是文件
C?.lib
,C启动库代码将是
c0?.lib
,其中
是表示内存模型的字母。
global _main
extern _printf     ;What would be its equivalent in TASM?
section .data
msg db "Hello World!", 0Dh, 0Ah, 0
section .bss
section .text

_main:
push ebp
mov ebp, esp

push msg         ;How do we do
call _printf     ;this with TASM?

add esp, 4
mov esp, ebp
pop ebp
ret