如何在装配中从DL(或类似)打印char? (英特尔语法32位)

时间:2017-01-18 17:39:58

标签: assembly 32-bit intel-syntax

一开始,我想指出我在集会方面完全是新手。我必须创建一个从命令行2参数 - int和string得到的程序。接下来,它必须在字符串中输入最后一个字的字符串,如int number所示。 我使用的是32位的英特尔语法 - 我觉得这很重要。

例如:./a.out 3" ab cd"在屏幕上显示" cdcdcd"

首先,我只专注于找到最后一个单词并将其打印在屏幕上 - 不是在循环中而是仅仅一次。添加一个循环对我来说不应该是个大问题。我尽力编写工作代码并且编译时没有错误,但是它没有在控制台中打印任何内容 - 我认为打印时出现了错误,而char#34;从最后一句话。我不知道如何正确打印它。我非常感激你的帮助。我仅限于在大学获得的小知识,所以请让我所有的提示尽可能简单,我能理解它们。 :)

 .intel_syntax noprefix

.globl main
.text

main:
 push ebp
 mov ebp, esp       
 mov ebx, [ebp + 12]
 mov ecx, [ebx + 4] # int ECX
 mov ebx, [ebx + 8] # string EBX
 xor eax, eax 

 call findend

 pop ebp
 mov ebx, 0
 mov ecx, 0
 ret

findend:
 mov dl, byte ptr [ebx + eax]
 cmp dl, 0
 jz findword
 inc eax
 jmp findend

findword: 
 dec eax
 mov dl, byte ptr [ebx + eax]
 cmp dl, ' '
 jz foundword
 jmp findword

foundword:
 inc eax
 mov dl, byte ptr [ebx + eax]
 cmp dl, 0
 jz theend
 push eax
 push edx
 push offset msg1
 call printf
 add esp, 4
 pop edx
 pop eax
 jmp foundword

theend:
 ret


.data
 msg1:   .asciz "%c"

0 个答案:

没有答案