汇编语言程序 题目请教 求高人解答!

2024-11-05 04:21:04
推荐回答(3个)
回答(1):

1
DATA SEGMENT
SRC DB 'How are you?'
DES DB 'are'
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,OFFSET SRC
MOV DI,OFFSET DES
LOP: MOV CX,3
CLD
REPZ CMPSB
CMP CX,0
JZ NEXT
MOV DI,OFFSET DES
ADD SI,CX ;si-(3-cx)+1
SUB SI,2
JMP LOP
NEXT: AND DH,0
MOV DX,SI ;SI存放'are'出现的末位置
SUB DL,3
ADD DL,30H ;显示位'are'的起始位置
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
2
DATA SEGMENT
BUFFER DB 'How are you',00H
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET BUFFER

LOP1: MOV BL,[SI]
CMP BL,20H
JNZ NEXT ;如果为逗号,将后面的数据前移
MOV DI,SI
LOP2: MOV BL,[DI+1]
MOV [DI],BL
INC DI
MOV BL,[DI]
CMP BL,0H ;如果为00,跳出内循环
JNZ LOP2

NEXT: INC SI
MOV BL,[SI]
CMP BL,0H ;如要[SI]小于为00H,跳出循环
JNZ LOP1

MOV AH,4CH
INT 21H
CODE ENDS
END START
3
DATA SEGMENT
BUF DB 60
N DB ?
CHAR DB 60 DUP(0)
STR DB 'INPUT NUM:','$'
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET STR
MOV AH,9
INT 21H

MOV DX,OFFSET BUF
MOV AH,10
INT 21H

MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H

MOV CL,N
MOV SI,OFFSET CHAR
AND BH,0
MOV BL,N
ADD SI,BX
LOP1: DEC SI
MOV DL,[SI]
MOV AH,2
INT 21H
LOOP LOP1

MOV AH,4CH
INT 21H
CODE ENDS
END START

4
DATA SEGMENT
BUF DW 1234H,3456H,2134H,7893H,3456H
RESULT DW 0,0
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:CODE,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
CALL PLUS_N
MOV SI,OFFSET RESULT
MOV BX,[SI+2]
CALL DISPLAY
MOV BX,[SI]
CALL DISPLAY
MOV AH,4CH
INT 21H
;功能:计算多字节相加
;入口参数:BUF
;出口参数:RESULT
PLUS_N PROC

AND DX,0
AND AX,0
MOV CL,5
MOV SI,OFFSET BUF
LOP: ADD AX,[SI]
ADC DX,0
INC SI
INC SI
LOOP LOP
MOV SI,OFFSET RESULT
MOV [SI],AX
MOV [SI+2],DX

RET
PLUS_N ENDP
;功能:显示十六进数
;入口参数:BX
DISPLAY PROC
MOV CH,4
LOP1: MOV CL,4
ROL BX,CL
MOV DL,BL
AND DL,0FH
ADD DL,30H
CMP DL,3AH
JB NEXT
ADD DL,7
NEXT: MOV AH,2
INT 21H
DEC CH
CMP CH,0
JNZ LOP1
RET
DISPLAY ENDP

CODE ENDS
END START

回答(2):

1)编程完成在一个源字符串中搜索子字符串的功能(要求使用串比较指令cmpsb进行各次搜索),并输出搜索结果。
提示:例如,源串为:How are you?
子串为:are
(2)缓冲区BUFFER中存放有字符串,以00h为结束标志。编写程序,把字符串中的空格删除,后续字符依次前移。

(3)从键盘读入一个字符串(长度<80),然后将字符串以与输入相反的顺序显示出来。
(4)3..实验题
设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果通过调用显示子程序以16进制形式显示在在屏幕上。

要求:(1)编写主程序以及两个子程序(多个字数据相加的子程序和十六进制形式显示子程序),并将所有子程序和主程序存放在同一文件中进行汇编和连接,最后得到运行结果;
(2)按多模块程序设计方法,将主程序、各子程序作为独立的源程序文件分别进行汇编,然后连接为一个可执行文件。最后运行得到结果。

回答(3):

为了尽快得到答案,楼主应该一个、一个的提出问题。
让一个人编写五个程序,也太难为大家了。