汇编程序 - 添加两个变量

时间:2015-01-08 18:18:59

标签: windows assembly x86

我刚刚尝试在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

1 个答案:

答案 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

除非您有一个方便的库,其中包含转换功能。