gpt4 book ai didi

assembly - 了解程序集数据段x86 MASM

转载 作者:行者123 更新时间:2023-12-02 06:16:39 24 4
gpt4 key购买 nike

我有一些在x86上进行汇编的示例代码,使用的是我想学习的MASM,但是我很难理解。以下是以下数据段:

    .data
sNum1 word 23,-17
iX dword 37,54
sNum2 word 25,-5,3 dup (-17,4)
bVal1 byte 'ABC',3 dup(-1,23) ,35
iNumVals dword 21,-43,45,167,92,135,-786
bVal2 byte '345',37,-1
iNum1 dword ? ;user-input first number
iNum2 dword ? ;user-input 2nd number
iSum dword ? ;sum of user-input values
strPromptName byte 10,13,"What is your name: ",0
strInput byte 20 dup(?) ;holds user-input characters
strGreeting byte 10,13,9,"Good morning, ",0
strPromptNum byte 10,13,"Enter a number:",0
strInputNum byte 12 dup(?) ;holds input ASCII numbers
strOutputNum byte 12 dup(?) ;numeric characters after conversion
strSumIs byte 10,13,10,13,9,"The output sum is ",0
strArrayIs byte 10,13,"The values in the array are",0

为什么定义的字符串以 byte的形式存储在字符串值之前包含数字。例如, strGreeting包含“早安”,但前面带有“10,13,9”,后跟一个“,0”。目的/方法是什么?为什么这些值在这里?它们是某种缓冲区吗?如果是,每个缓冲区代表什么?

最佳答案

10、13、9是字符代码,最有可能用于换行(LF),回车(CR)和制表符。作为控制字符,它们用于格式化输出。例如,控制台将如下所示:

What is your name: Tom
Good morning, Tom
Enter a number:
1
2
3
4

The output sum is 10

(顺便说一句,通常的顺序是CR LF,而不是LF CR。)

对字符序列进行操作的例程通常使用0(NUL)来确定它们已读取序列末尾。

由运行程序的输出例程和控制台决定这些代码将解释为哪些字符。在英语MS-DOS中,编码可能是CP437(IBM OEM)。在英文Windows中,可能是Windows-1252。对于您似乎正在使用的字符,其编码与ASCII相同。 (即使如此,您的系统也不太可能使用ASCII。这只是“故意的巧合”。)

关于assembly - 了解程序集数据段x86 MASM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28511319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com