ending: lea dx,str mov ah,9 int 21h mov ax,4c00h int 21h
时间: 2024-02-10 18:49:02 浏览: 236
这段代码是使用汇编语言编写的程序,它的作用是输出字符串并退出程序。
首先,`lea dx,str` 将字符串的地址加载到 `dx` 寄存器中。这里的 `str` 是一个字符串常量,它可能在程序的数据段中定义。
然后,`mov ah,9` 设置 `ah` 寄存器的值为 9,这是 DOS 中的一个系统调用,用于在屏幕上显示字符串。
接着,`int 21h` 执行 DOS 的系统调用,将 `dx` 中的字符串显示在屏幕上。
最后,`mov ax,4c00h` 设置 `ax` 寄存器的值为 4c00h,这是 DOS 中的另一个系统调用,用于退出程序。
再次调用 `int 21h`,程序即可正常退出。
相关问题
REPZ CMPSB;字符串比较 JZ MATCH;相等输出MATCH LEA DX,TIP4 MOV AH,9 INT 21H;不等输出NOT MATCH JMP EXIT MATCH: LEA DX,TIP3 MOV AH,9 INT 21H;DISPLAY TIP1 JMP EXIT EXIT: LEA DX,TIP5 MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,13 JZ AA JMP START AA: MOV AH,4CH INT 21H CODE ENDS END START 改为如果字符串2长度大于等于字符串1,则输出字符串1,如果字符串2长度小于字符串1,则补齐字符串2长度到字符串1,补足部分XXXX.
好的,我来帮你修改代码,将字符串比较改为输出或补齐字符串的操作。以下是修改后的代码示例:
```
TITLE 字符串比较
DATA SEGMENT
STR1 DB 'STRING1$'
STR2 DB 'STRING2$'
TIP1 DB 'MATCH$'
TIP2 DB 'NOT MATCH$'
TIP3 DB 'DISPLAY TIP1$'
TIP4 DB 'DISPLAY TIP2$'
TIP5 DB 'PRESS ENTER TO EXIT$'
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
; 获取字符串长度
MOV CX, 0
MOV SI, OFFSET STR1
MOV AL, [SI]
CMP AL, '$'
JE COMPARE
INC CX
INC SI
JMP SHORT $+2
COMPARE:
MOV DI, OFFSET STR2
MOV AL, [DI]
CMP AL, '$'
JE COMPARE_END
INC DI
INC CX
CMP CX, 8
JE COMPARE_END
JMP SHORT COMPARE
COMPARE_END:
; 判断字符串长度并补齐
CMP CX, 8
JAE OUTPUT
MOV DX, OFFSET STR2
ADD DX, CX
MOV AL, 'X'
CMP CX, 0
JE FILL
JMP SHORT $+2
FILL:
MOV [DX], AL
INC CX
INC DX
CMP CX, 8
JE OUTPUT
JMP SHORT FILL
OUTPUT:
; 输出字符串1或字符串2
MOV DX, OFFSET STR1
CMP CX, 8
JB OUTPUT_2
OUTPUT_1:
MOV AL, [DX]
CMP AL, '$'
JE MATCH
MOV AH, 2
MOV DL, AL
INT 21H
INC DX
DEC CX
JMP OUTPUT_1
OUTPUT_2:
MOV DX, OFFSET STR2
OUTPUT_21:
MOV AL, [DX]
CMP AL, '$'
JE EXIT
MOV AH, 2
MOV DL, AL
INT 21H
INC DX
DEC CX
JMP OUTPUT_21
; 比较字符串
MATCH:
LEA DX, TIP1
MOV AH, 9
INT 21H
JMP EXIT
; 不匹配
NOT_MATCH:
LEA DX, TIP2
MOV AH, 9
INT 21H
JMP EXIT
; 退出程序
EXIT:
LEA DX, TIP5
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
CMP AL, 13
JZ AA
JMP START
AA:
MOV AH, 4CH
INT 21H
CODE ENDS
END START
```
这段代码中,我们首先获取了字符串1和字符串2的长度,并判断了字符串2的长度是否大于等于字符串1的长度。如果是,则直接输出字符串1或字符串2;否则,我们用字符串2补齐到和字符串1一样的长度,并输出它们。最后,我们将比较字符串和输出结果的部分删除,因为这部分已经不需要了。
DATA SEGMENT A DB 10,?,10 DUP(?) B DB 'Please input the number : ','$' C DB 0AH,0DH,'Please re-enter',0AH,0DH,'$' D DB 0AH,0DH,'Sum=','$' SUM DB 2 DUP(?),'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX XOR CX,CX L1: LEA DX,B MOV AH,9 INT 21H LEA DX,A MOV AH,0AH INT 21H LEA SI,A CMP BYTE PTR[SI+1],6 JNC L2 JMP LAST L2: LEA DX,C MOV AH,9 INT 21H JMP L1 LAST: MOV CL,BYTE PTR[SI+1] X1: MOV AL,[SI+2] SUB AL,30H MOV [SI+2],AL INC SI LOOP X1 LEA SI,A MOV AX,0 MOV CL,BYTE PTR[SI+1] X2: ADD AL,[SI+2] INC SI LOOP X2 MOV AH,0 MOV BL,10 DIV BL ADD AL,30H LEA SI,SUM MOV [SI],AL MOV [SI+1],AH MOV DX,OFFSET D MOV AH,9H INT 21H LEA DX,SUM MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS END START给以上代码 注释
这是一个8086汇编语言的程序,用于计算用户输入的一系列数字的总和。程序的主体部分都在CODE段中,其中START是程序的入口点。程序开头的指令将DATA段加载到DS寄存器中。接下来,程序使用循环来读取用户输入的数字,直到用户输入6个数字或更多(由第二个字节决定)。如果用户输入的数字少于6个,则程序会提示用户重新输入。读取用户输入的数字是通过调用21h中断服务程序来实现的。程序使用循环计算输入数字的总和,并将结果打印到屏幕上。程序的最后一条指令是4Ch中断,用于正常结束程序。
阅读全文