assembly - 将大写转换为小写组件 TASM
问题描述
我想在汇编 TASM 中将大写转换为小写,我编写了以下代码。文本在stdin
其中,最多包含 100 个字符。它应该输出文本并显示读取的字符数,但是当我尝试从键盘输入时它不起作用:
DATA SEGMENT PARA PUBLIC 'DATA'
SIR DB 100 DUP (?)
newline DB 10,13,'$'
DATA ENDS
CODE SEGMENT PARA PUBLIC 'CODE'
ASSUME CS:CODE, DS:DATA, ES:DATA
; procedura de conversie
fctie PROC FAR
; IF AL<'A'
cmp al, 'A'
JB iesire
; IF AL>'Z'
cmp al, 'Z'
JA iesire
ADD AL, 20H
iesire: RET
fctie ENDP
START PROC FAR
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV BL, 0
MOV DI, OFFSET SIR
cld
;citirea unui caracter din sir
L1:
MOV AH, 01H
INT 21H
;vf dc e caracterul space
CMP AL, ' '
JE increment
CMP AL, '$'
JE auxL2
CALL fctie
; ca sa evitam intrarea automata in increment
JMP auxL
increment: INC BL
auxL:
;rescrierea caracterului in lowercase
;-instructions equiv to stosb
;MOV ES:[DI], AL
;INC DI
STOSB
auxL2:
;vf. dc e sf. de sir
CMP AL, '$'
LOOPNE L1
; linie noua
LEA DX, newline
MOV AH, 09H
INT 21H
;afisare
mov DX, offset SIR
MOV AH, 09H
INT 21H
; afisare nr de cuvinte
ADD BL, 01
MOV DL, BL
MOV AH, 02H
ADD DL, 30h; convertire in string pentru ca nr sa afiseze: 30H e val lui 0 hexa in ASCII
INT 21H
;iesire program
MOV AH, 4CH
INT 21H
START ENDP
CODE ENDS
END START
解决方案
推荐阅读
- arrays - 基于对象键组合对象键值对
- architecture - 规模/架构挑战
- r - ggplot2::facet_wrap() 的默认面板布局?
- c# - Web api C# POST
- c++ - 获取嵌套类 STL 容器中的元素总数
- c# - 将 DataGridView 中的单元格转换为组合框并返回:这是好的代码吗?
- php - MySql LEFT JOIN 在 PHP 页面中首先返回错误,但在 MYSQL 命令行中返回正确结果
- excel - 我在一个单元格中有一个时间,想要减去 2 小时并将时间添加 2 小时并在 excel 中显示
- spring - 为什么 Spring Boot 应用程序 pom 需要 spring-boot-starter-parent 和 spring-boot-starter-web?
- r - 如何使用 dplyr 计算与 rowmean 的比率