如何在汇编语言中将字符串输入转换为整数值以用于循环?
汇编实现字符串转整数及循环应用
需求说明
已通过键盘输入收集了名称字符串(存储于userStore)和偏移值字符串(存储于valStore),需要将valStore中的十进制数字字符串转换为整数,用于后续循环的偏移控制。
完整汇编代码实现
SECTION .data userMsg db 'Please enter a name: ', 0 userMsgLen equ $-userMsg valMsg db 'Offset value: ' valMsgLen equ $-valMsg valStore resb 255 userStore resb 255 SECTION .bss s2 resb 255 ; 存储偏移处理后的结果 offset_val resd 1 ; 存储转换后的整数偏移值 SECTION .text global _start _start: ; 提示输入名称 mov edx, userMsgLen mov ecx, userMsg mov ebx, 1 mov eax, 4 int 80h ; 读取名称输入到userStore mov edx, 255 mov ecx, userStore mov ebx, 0 mov eax, 3 int 80h ; 提示输入偏移值 mov edx, valMsgLen mov ecx, valMsg mov ebx, 1 mov eax, 4 int 80h ; 读取偏移值字符串到valStore mov edx, 255 mov ecx, valStore mov ebx, 0 mov eax, 3 int 80h ; -------------------------- ; 将valStore中的字符串转换为整数 ; -------------------------- mov esi, valStore ; esi指向偏移值字符串起始 xor eax, eax ; 初始化结果寄存器为0 mov ebx, 10 ; 十进制基数10 convert_loop: mov cl, [esi] ; 读取当前字符 cmp cl, 0x0A ; 判断是否为换行符(输入结束标志) je convert_done ; 是换行则转换完成 cmp cl, '0' ; 检查是否为有效数字字符 jb convert_done cmp cl, '9' ja convert_done sub cl, '0' ; 字符转数字 mul ebx ; 结果 *=10 add eax, ecx ; 加上当前数字 inc esi ; 指针移到下一个字符 jmp convert_loop convert_done: mov [offset_val], eax ; 存储转换后的整数到内存 ; -------------------------- ; 使用偏移值进行循环处理示例(以偏移复制名称为例) ; -------------------------- mov esi, userStore ; esi指向原始名称字符串 mov edi, s2 ; edi指向结果存储区 mov ecx, [offset_val] ; 设置循环计数器为偏移值 ; 先跳过偏移量的字符 skip_loop: cmp byte [esi], 0x0A ; 提前检查是否到字符串末尾 je copy_start inc esi dec ecx jnz skip_loop copy_start: ; 复制剩余字符到s2 copy_loop: lodsb ; 从esi读取一个字符到al,esi自增 cmp al, 0x0A ; 判断是否到换行符(字符串结束) je copy_done stosb ; 将al写入edi,edi自增 jmp copy_loop copy_done: mov byte [edi], 0 ; 添加字符串结束符 ; 输出处理后的结果 mov edx, edi ; 计算结果长度 sub edx, s2 mov ecx, s2 mov ebx, 1 mov eax, 4 int 80h ; 程序退出 mov eax, 1 xor ebx, ebx int 80h
关键代码说明
- 字符串转整数部分:
- 利用
mul ebx实现十进制进位(每次结果乘10),通过sub cl, '0'将ASCII字符转换为对应数字值,逐字符累加得到最终整数。 - 以换行符
0x0A作为输入字符串结束标志,同时过滤非数字字符。
- 利用
- 循环应用部分:
- 将转换后的偏移值加载到
ecx作为循环计数器,先跳过对应数量的字符,再复制剩余内容到目标缓冲区。 - 使用
lodsb和stosb指令简化字符串的读取与写入操作,这两条指令会自动维护esi和edi的指针偏移。
- 将转换后的偏移值加载到
内容的提问来源于stack exchange,提问作者JakkuPingu
相关产品推荐
相关产品推荐

