我刚刚尝试在x86的程序集中编写我的第一个程序,我不知道为什么,但它没有达到我想要的效果。没有错误,没有通信,但是在执行'execute'后程序没有打开。我希望这些程序添加两个变量并发送回他们的总和。这是代码:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
a dw 1h
b dw 2h
z dw 01 dup(?),0
.data?
.code
start:
mov ds, ax
mov ax, a
mov bx, b
clc
add ax, bx
mov edi, offset z
mov [edi], ax
mov ah, 09h
mov dx, z
int 21h
mov ah, 4ch
int 21h
end start
请帮帮我:C
答案 0 :(得分:0)
DOS function 09h需要一个字符串;具体来说,是一个字节数组,每个字节包含一个字符的ASCII代码,以24h(ASCII代码$
)结束。例如:
z db '3$'
等同于:
z db 33h, 24h
相反,您已将z
定义为单词数组,并使用03h填充第一个单词(1 + 2的结果)。在ASCII中,03h是non-printing character。
汇编不是一些具有方便的自动类型转换的高级语言。在汇编中,您必须自己将数值转换为ASCII字符序列。
怎么做?这已被问过很多次了。就像这里:Assembly, printing ascii number
除非您有一个方便的库,其中包含转换功能。