B10READ PROC NEAR ;子程序B10READ MOV AH,09 LEA DX,MESSG1 ;将MESSG1的有效地址传送给DX INT 21H ;显示MESSG1:Name? MOV AH,0AH LEA DX,NAMEPAR ;将NAMEPAR的有效地址传送给DX INT 21H MOV AH,09 LEA DX,CRLF ;将CRLF的有效地址传送给DX INT 21H ;显示CRLF中的内容(换行) MOV BH,0 MOV BL,NAMELEN ;将NAMELET传送给BL MOV CX,21 ;21(16进制里的15) SUB CX,BX ;CX-BX并将值返回给CX B20: MOV NAMEFLD[BX],20H INC BX ;BX加1?? LOOP B20 ;循环执行B20 RET ;子程序返回解释代码
时间: 2024-03-18 12:43:47 浏览: 11
这是一段汇编语言的代码,实现了一个名字输入的子程序B10READ。大致的意思是:
1. 将AH的值设置为09,用于显示提示信息。
2. 将MESSG1的有效地址传送给DX,用于显示提示信息。
3. 调用21H中断,显示提示信息。
4. 将AH的值设置为0A,用于接收用户输入。
5. 将NAMEPAR的有效地址传送给DX,用于接收用户输入。
6. 调用21H中断,接收用户输入的名字。
7. 将AH的值设置为09,用于显示换行符。
8. 将CRLF的有效地址传送给DX,用于显示换行符。
9. 调用21H中断,显示换行符。
10. 将BX的值设置为NAMELEN,用于将名字输入框的长度赋值给BL。
11. 将CX的值设置为21,用于循环21次。
12. 将CX-BX的值返回给CX,用于计算空格的数量。
13. 循环将20H的值(空格)存储到名字输入框中,直到循环21次。
14. 子程序返回。
具体的代码实现和用途需要结合上下文来理解。
相关问题
DELAY PROC NEAR ; 延时子程序 PUSH BX PUSH CX MOV BX,10 T0: MOV CX,0FFH T1: LOOP T1 DEC BX JNZ T0 POP CX POP BX RET DELAY ENDP CODE ENDS
这段代码是一个用于延时的子程序。它使用了寄存器BX和CX来进行计数和循环。
首先,将BX和CX的值保存在堆栈中,然后将BX的值设为10。接下来,进入一个标签为T0的循环,在循环中将CX的值设为0xFF(255)。
然后,通过LOOP指令进行循环,每次循环CX的值会递减1。当CX的值变为0时,循环结束。然后,通过DEC指令将BX的值递减1,并检查是否为零。如果不为零,则跳转回标签T0处继续执行循环。
最后,从堆栈中恢复CX和BX的值,并使用RET指令返回到调用该延时子程序的地方。
这段代码的作用是通过循环延时一段时间,具体延时的时间取决于循环的次数。
汇编语言如何用 mov ah,09h int 21h 输出字符串
在汇编语言中,使用 `mov ah,09h` 将 `ah` 寄存器的值设置为 `09h`,它表示打印字符串的功能。然后使用 `int 21h` 指令调用 DOS 中断 21h,以执行打印字符串的操作。
下面是一个示例程序,它打印字符串 "Hello, world!":
```
.model small
.stack 100h
.data
msg db 'Hello, world!', '$'
.code
main proc
mov ax, @data
mov ds, ax
mov ah, 09h ; 设置打印字符串的功能
lea dx, msg ; 将 DX 寄存器设置为字符串的地址
int 21h ; 调用 DOS 中断 21h,打印字符串
mov ah, 4ch ; 设置程序退出的功能
int 21h ; 调用 DOS 中断 21h,结束程序
main endp
end main
```
在上面的程序中,使用 `lea dx, msg` 指令将 `dx` 寄存器设置为字符串的地址,`msg` 是在 `.data` 段中定义的字符串变量。然后,使用 `int 21h` 指令调用 DOS 中断 21h,以执行打印字符串的操作。
最后,使用 `mov ah, 4ch` 和 `int 21h` 指令退出程序。