补全参考程序: DATA SEGMENT STR DB ‘hello,everybody!',‘$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,STR ;目标地址传输指令,把串首地址给 BX 寄存器 A1: MOV AL,[BX] ;把第一个字符给 AL ? AL, ‘$' ;与’$’比较 ? DONE ;ZF 标志为 1 则转移,是’$’则结束 CMP AL, ‘a' ;与‘A’比较 ? NEXT ;低于则转移,为大写字母 CMP AL, ‘z' ;与‘Z’比较 JG ? ;高于则转移,不是字母 ? AL,20H ;将小写字母改为大写字母 MOV [BX],AL ;把大写字母送回字符串中 NEXT: ? BX ;指向下一个字符 JMP A1 DONE: JMP $ CODE ENDS END START
时间: 2024-04-22 22:28:43 浏览: 18
补全参考程序:
DATA SEGMENT
STR DB ‘hello,everybody!',‘$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
LEA BX,STR ;目标地址传输指令,把串首地址给 BX 寄存器
A1:
MOV AL,[BX] ;把第一个字符给 AL
CMP AL, ‘$' ;与’$’比较
JE DONE ;ZF 标志为 1 则转移,是’$’则结束
CMP AL, ‘a' ;与‘A’比较
JL NEXT ;低于则转移,为大写字母
CMP AL, ‘z' ;与‘Z’比较
JG NOT_ALPHA ;高于则转移,不是字母
SUB AL, 20H ;将小写字母改为大写字母
MOV [BX],AL ;把大写字母送回字符串中
NOT_ALPHA:
NEXT:
INC BX ;指向下一个字符
JMP A1
DONE:
JMP $
CODE ENDS
END START
相关问题
请帮我把代码' DATA SEGMENT STR DB 'HELLO,everybody!$' DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX LEA SI, STR UPPERCASE: MOV AL, [SI] CMP AL, 'a' JB NEXT CMP AL, 'z' JA NEXT SUB AL, 32 MOV [SI], AL NEXT: INC SI CMP BYTE PTR [SI], '$' JE EXIT JMP UPPERCASE EXIT: MOV AH, 4CH INT 21HCODE ENDSEND START' 增加一个把结果字符串输出到屏幕上的功能
好的,下面是已经增加了将结果字符串输出到屏幕上的完整代码:
```
DATA SEGMENT
STR DB 'HELLO,everybody!$'
RESULT DB 'The result is: $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; 大写转换部分不变
LEA SI, STR
UPPERCASE:
MOV AL, [SI]
CMP AL, 'a'
JB NEXT
CMP AL, 'z'
JA NEXT
SUB AL, 32
MOV [SI], AL
NEXT:
INC SI
CMP BYTE PTR [SI], '$'
JE PRINT_RESULT
JMP UPPERCASE
PRINT_RESULT:
; 输出结果字符串到屏幕上
MOV AH, 9
MOV DX, OFFSET RESULT
INT 21H
; 输出转换后的字符串到屏幕上
MOV AH, 9
MOV DX, OFFSET STR
INT 21H
; 退出程序
MOV AH, 4CH
INT 21H
CODE ENDS
END START
```
程序运行后,会将转换后的字符串和结果字符串一起输出到屏幕上,结果为:```
The result is: HELLO,EVERYBODY!
```
1. 写出完整程序,把一个字符串中的所有小写字母改为相应的大写字母,该字符串以‘$’结尾。该字符串定义如下: DATA SEGMENT STR DB ‘HELLO,everybody!$’ DATA ENDS2. 已知有一个首地址为BUF的数组,编写完整程序,计算数组中所有数值的和,并存放在TOTAL单元中,数据段定义如下: DATA SEGMENT BUF DW 56,47, 92,123,-45, 6, 87, -25, 31,19TOTAL DW ? DATA ENDS
1. 以下是一个将字符串中所有小写字母转换为大写字母的程序:
```
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
STR DB 'HELLO,everybody!$'
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
LEA SI, STR ; SI指向字符串的第一个字符
UPPERCASE:
MOV AL, [SI] ; 将当前字符存储在AL寄存器中
CMP AL, 'a' ; 如果当前字符是小写字母
JB NEXT ; 则跳转到下一个字符
CMP AL, 'z' ; 如果当前字符是小写字母
JA NEXT ; 则跳转到下一个字符
SUB AL, 32 ; 转换为大写字母
MOV [SI], AL ; 将转换后的字符存储回字符串中
NEXT:
INC SI ; 指向下一个字符
CMP BYTE PTR [SI], '$' ; 如果到达字符串末尾
JE EXIT ; 则跳转到程序结束
JMP UPPERCASE ; 继续处理下一个字符
EXIT:
MOV AH, 4CH ; DOS退出调用
INT 21H
CODE ENDS
END START
```
2. 以下是一个计算数组中所有值的和的程序:
```
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
BUF DW 56, 47, 92, 123, -45, 6, 87, -25, 31, 19
TOTAL DW ?
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV CX, 10 ; 数组中有10个值
MOV BX, 0 ; 初始值为0
LEA SI, BUF ; SI指向数组的第一个元素
SUM:
ADD BX, [SI] ; 将当前元素的值添加到总和中
ADD SI, 2 ; 指向下一个元素
LOOP SUM ; 继续处理下一个元素
MOV AX, BX ; 将总和存储在AX寄存器中
MOV [TOTAL], AX ; 将总和存储在TOTAL单元中
MOV AH, 4CH ; DOS退出调用
INT 21H
CODE ENDS
END START
```
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)