用汇编语言编一个程序,要求如下:
发布网友
发布时间:2022-04-20 09:51
我来回答
共3个回答
热心网友
时间:2023-10-06 12:47
用十进制形式显示字符位置的代码如下:
DSEG SEGMENT
msgi db "please input a string:$";显示信息,提示输入一串字符
buf db 50,0
table db 50 p (?);输入字符串缓冲区
msgd db 0dh,0ah,"the location is:$";显示信息,提示0所在位置
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG,es:DSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
mov es,ax
lea dx,msgi;显示信息,提示输入一串字符
mov ah,9
int 21h
lea dx,buf;输入字符串
mov ah,0ah
int 21h
lea si,buf
mov cl,[si+1];输入字符实际个数存入CX中
mov ch,0
lea di,table;输入字符起始地址存入DI
mov al,30h;要查找的字符0送AL
cld;置方向标志为地址增量
repnz scasb
jnz tj
lea dx,msgd;显示信息,提示0所在位置
mov ah,9
int 21h
sub di,offset table
mov bx,di
call disp;用十进制形式显示位置
tj:
mov ah,1;按任意键退出
int 21h
mov ax, 4c00h ;程序结束,返回到操作系统系统
int 21h
MAIN ENDP
disp proc near
mov cx,10000d
call dec_div
mov cx,1000d
call dec_div
mov cx,100d
call dec_div
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21h
ret
dec_div endp
disp endp
CSEG ENDS
END MAIN
热心网友
时间:2023-10-06 12:47
;COM格式,对空串和无0串必需加以预防
code segment
assume cs:code,ds:code
org 100h
start:
push cs
pop ds
push cs
pop es
lea dx,Tips
mov ah,9
int 21h
lea dx,buf ;从键盘输入并显示最多50个字符(以回车符结尾)
mov ah,0ah ;将它们存放到内存中从TABLE单元开始的区域
int 21h
mov ax,0e0dh ;回车
int 10h
mov al,0ah ;换行
int 10h
cld
lea di,TABLE
mov bp,di
mov al,'0'
xor ch,ch
mov cl,cnt
jcxz T0 ;空串出错
repnz scasb ;找字符0
jz Q2
T0:lea dx,Err
jmp Q3
Q2:mov ax,di
sub ax,bp
aam
or ax,3030h
mov X,ah
mov X+1,al
lea dx,str ;用十进制形式显示字符位置
Q3:mov ah,9
int 21h
quit:
mov ah,0
int 16h
mov ah,4ch
int 21h
Tips db 'Input a String: ',0dh,0ah,'$'
buf db 50
cnt db 0
TABLE db 50 p(0)
str db '"0" is No.'
X db '00.$'
Err db '"0" is not found!$'
code ends
end start
热心网友
时间:2023-10-06 12:48
; 本程序通过编译,运行正确。
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -----------------------------------------
TABLE db 51,?,51 p(?) ;
Prompt_Str db 'Please input a charactor string: $' ;提示输入字符串
Found_Str db 7,13,10,13,10,'The position of the charactor "0" in the string: $'
No_Founds db 7,13,10,13,10,'The charactor "0" have not found in the string.$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
Output Prompt_Str ;提示输入字符串
lea dx,TABLE ;输入缓冲区地址
mov ah,0ah ;从键盘接收字符串
int 21h
cld
lea di,TABLE[1] ;取输入缓冲区地址
mov al,[di] ;取实际输入的字符个数
inc di
xor ah,ah
mov cx,ax ;字符个数
mov al,'0' ;要查找的字符
repnz scasb ;扫描、查找
jcxz No_Found
Output Found_Str ;提示显示字符“0”在字符串中的位置
mov ax,di
sub ax,OFFSET TABLE[2]
call Dec_ASCII ;显示它是输入的第几个字符
jmp Exit_Proc
No_Found: Output No_Founds ;提示没找到字符“0”。
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束