假如我汇编程序的输出为23:1204,我想去掉0
时间: 2024-03-12 11:44:01 浏览: 18
如果你想将输出中的 `0` 去掉,可以使用 `INT 29H` 中断来输出字符串。这个中断可以输出字符串中的字符,并且可以跳过字符串中的空格。下面是一个示例程序,可以将输出中的 `0` 去掉:
```
.model small
.stack 100h
.data
msg db "23:1204$"
.code
main proc
mov ax, @data
mov ds, ax
call RemoveZero ; 调用去掉 0 的程序
mov ah, 4ch ; 结束程序
int 21h
main endp
RemoveZero proc
mov ah, 29h ; 输出字符串
lea dx, msg
int 21h
ret
RemoveZero endp
end main
```
在这个程序中,我们使用了 `INT 29H` 中断来输出字符串,这个中断会跳过字符串中的空格,所以可以将输出中的 `0` 跳过。你可以将 `msg` 数据段中的字符串修改为你的输出,然后运行程序看看结果。
相关问题
用汇编语言在软件emu8086上编写以下程序:从键盘输入二个字符串,将二个字符串的字符合并后排序输出。
好的,以下是汇编程序的代码:
```
.model small
.stack 100h
.data
msg1 db 'Enter first string: $'
msg2 db 'Enter second string: $'
msg3 db 'Merged and sorted string: $'
input1 db 20,?,dup('$') ; 存放第一个字符串
input2 db 20,?,dup('$') ; 存放第二个字符串
merged db 40,?,dup('$') ; 存放合并后的字符串
nl db 10,13,'$' ; 换行符
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
; 输出提示信息,获取第一个字符串
lea dx, msg1
mov ah, 9
int 21h
lea dx, input1
mov ah, 0Ah
int 21h
; 输出提示信息,获取第二个字符串
lea dx, msg2
mov ah, 9
int 21h
lea dx, input2
mov ah, 0Ah
int 21h
; 合并两个字符串
lea si, input1
lea di, merged
mov cx, [si] ; 获取第一个字符串的长度
movsb ; 复制第一个字符串
lea si, input2
mov cx, [si] ; 获取第二个字符串的长度
movsb ; 复制第二个字符串
mov byte ptr [di], '$' ; 添加字符串结束符
; 排序合并后的字符串
lea si, merged ; SI 指向合并后的字符串
mov cl, [si] ; 获取字符串的长度
dec cl ; 长度减一,因为要去掉字符串结束符
mov di, si ; DI 指向字符串的开头
inc di ; DI 指向第一个字符
mov bx, di ; BX 存储当前比较字符的地址
sort_loop:
cmp cl, 0 ; 如果字符串已经排序完成,跳出循环
jle sort_done
mov cx, cl ; CX 存储当前字符串的长度
mov si, di ; SI 存储当前比较字符的地址
inc si ; SI 指向下一个字符
inner_loop:
cmp cx, 0 ; 如果已经比较完整个字符串,跳出循环
jle inner_done
mov al, [bx] ; AL 存储当前比较字符的值
mov dl, [si] ; DL 存储下一个字符的值
cmp al, dl ; 比较两个字符
jle no_swap ; 如果不需要交换,跳过
mov ah, [bx] ; 交换字符
mov al, [si]
mov [bx], al
mov [si], ah
no_swap:
inc si ; SI 移动到下一个字符
dec cx ; CX 减一
jmp inner_loop
inner_done:
inc di ; DI 移动到下一个字符
dec cl ; CX 减一
mov bx, di ; BX 存储当前比较字符的地址
jmp sort_loop
sort_done:
; 输出合并后的字符串
lea dx, msg3
mov ah, 9
int 21h
lea dx, merged
mov ah, 9
int 21h
lea dx, nl
mov ah, 9
int 21h
mov ah, 4ch
int 21h ; 程序结束
main endp
end main
```
上述程序使用 `int 21h` 中断来进行输入和输出操作,并使用字符串指针和字符串指令来处理字符串。它将两个输入的字符串合并为一个字符串,并对合并后的字符串进行冒泡排序。最后,它输出排序后的合并字符串。
用汇编语言模仿上述程序完成去除字符串中的某个字符提示输入字符串;输入任意字符串string,点击Enter结束输入;提示输入字符;输入任意字符ch,点击Enter结束输入将字符串中字符ch去除,输出变化后的字符串string2点击Enter程序退出
以下是汇编语言模仿上述程序完成去除字符串中的某个字符的代码,已加上中文注释:
DATA SEGMENT
; 请根据需要修改提示信息
STRING1 DB '请输入一个字符串:',13,10,'$'
STRING2 DB '请输入需要删除的字符:',13,10,'$'
STRING3 DB '删除后的字符串为:',13,10,'$'
BUF1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'$'
BUF2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'$'
DATA ENDS
STACKS SEGMENT PARA STACK
DW 128 DUP(0)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATA, SS:STACKS
START:
MOV AX, DATA
MOV DS, AX
; 提示用户输入一个字符串
LEA DX, STRING1
CALL DISPSTRING
; 读取用户输入的字符串
LEA DX, BUF1
CALL READSTRING
; 提示用户输入需要删除的字符
LEA DX, STRING2
CALL DISPSTRING
; 读取用户输入的字符
CALL READCHARACTER
MOV BL, AL
; 删除字符串中的指定字符
LEA SI, BUF1
LEA DI, BUF2
MOV CX, 0
LOOP1:
MOV AL, [SI]
CMP AL, BL
JZ SKIP
MOV [DI], AL
INC DI
INC CX
SKIP:
INC SI
LOOP LOOP1
; 输出删除指定字符后的字符串
LEA DX, STRING3
CALL DISPSTRING
LEA DX, BUF2
CALL PRINT
; 程序结束
MOV AH, 4CH
INT 21H
; 读取字符串
READSTRING PROC
LEA SI, BUF1
MOV CX, 0
MOV AH, 01H
READSTRING_LOOP:
INT 21H
CMP AL, 13
JE READSTRING_EXIT
MOV [SI], AL
INC SI
INC CX
JMP READSTRING_LOOP
READSTRING_EXIT:
MOV [SI], '$'
RET
READSTRING ENDP
; 读取字符
READCHARACTER PROC
MOV AH, 01H
READCHARACTER_LOOP:
INT 21H
CMP AL, 13
JE READCHARACTER_EXIT
MOV BL, AL
JMP READCHARACTER_LOOP
READCHARACTER_EXIT:
RET
READCHARACTER ENDP
; 显示字符串
DISPSTRING PROC
MOV AH, 09H
INT 21H
RET
DISPSTRING ENDP
; 输出字符串
PRINT PROC
LEA SI, BUF2
MOV CX, 0
PRINT_LOOP:
MOV DL, [SI]
CMP DL, '$'
JE PRINT_EXIT
MOV AH, 02H
INT 21H
INC SI
JMP PRINT_LOOP
PRINT_EXIT:
RET
PRINT ENDP
CODES ENDS
END START