MOV+AH+01H++INT++21H+++ADD+AL++20H++MOV++DL++AL+++MOV++AH++02H++INT++21H输入A输出什么
时间: 2023-10-31 11:06:13 浏览: 51
这段代码是汇编语言,它的作用是将字符'A'输出到屏幕上,并在其后面输出一个空格。具体的执行过程如下:
1. MOV AH, 01H:将01H赋值给寄存器AH,表示接下来要进行键盘输入操作。
2. INT 21H:调用21H中断,等待用户输入一个字符。
3. ADD AL, 20H:将AL寄存器中的ASCII码加上20H,即将'A'转换为'a'。
4. MOV DL, AL:将AL寄存器中的值赋给DL寄存器,即将字符'a'的ASCII码存入DL寄存器。
5. MOV AH, 02H:将02H赋值给寄存器AH,表示接下来要进行屏幕输出操作。
6. INT 21H:调用21H中断,将DL寄存器中的字符输出到屏幕上。
7. 输出空格:执行ADD AL, 20H和MOV DL, AL两条指令后,AL寄存器中的值为' '的ASCII码,再次执行MOV AH, 02H和INT 21H两条指令即可将空格输出到屏幕上。
因此,最终输出的结果是"A "(注意有一个空格)。
相关问题
代码逐句注释code segment assume cs:code start: mov ax,cs mov ds,ax mov dx,offset int_proc mov ax,2572h int 21h mov dx,21h in al,dx and al,0fbh out dx,al in al,0a1h and al,0fbh out 0a1h,al mov dx,28bh mov al,0b8h out dx,al mov al,09h out dx,al mov bl,8 ll: jmp ll int_proc: mov dx,288h in al,dx mov dl,al mov ah,02h int 21h mov dl,0dh int 21h mov dl,0ah int 21h mov dx,20h mov al,20h out dx,al out 0a0h,al dec bl jnz next in al,21h or al,08h out 21h,al sti mov ah,4ch int 21h next: iret code ends end start
这段代码是一段汇编代码,主要作用是设置中断处理程序,并且在中断处理程序中输出一些信息。下面是每一行代码的注释:
```
code segment ; 定义代码段
assume cs:code ; 设置代码段寄存器
start: ; 开始标记
mov ax,cs ; 将代码段寄存器 CS 的值移动到通用寄存器 AX 中
mov ds,ax ; 将 AX 中的值移动到数据段寄存器 DS 中
mov dx,offset int_proc ; 将中断处理程序的偏移地址移动到 DX 中
mov ax,2572h ; 将 2572H 移动到 AX 中
int 21h ; 执行 DOS 中断 21h,将中断向量设置为 int_proc
mov dx,21h ; 将端口地址 21H 移动到 DX 中
in al,dx ; 从 DX 指定的端口读取一个字节到 AL 中
and al,0fbh ; 将 AL 中的值与 0FBH 按位与
out dx,al ; 将 AL 中的值输出到 DX 指定的端口
in al,0a1h ; 从端口地址 0A1H 读取一个字节到 AL 中
and al,0fbh ; 将 AL 中的值与 0FBH 按位与
out 0a1h,al ; 将 AL 中的值输出到端口地址 0A1H
mov dx,28bh ; 将端口地址 28BH 移动到 DX 中
mov al,0b8h ; 将值 0B8H 移动到 AL 中
out dx,al ; 将 AL 中的值输出到 DX 指定的端口
mov al,09h ; 将值 09H 移动到 AL 中
out dx,al ; 将 AL 中的值输出到 DX 指定的端口
mov bl,8 ; 将值 8 移动到 BL 中
ll: ; 标记 ll
jmp ll ; 无条件跳转到标记 ll
int_proc: ; 定义中断处理程序
mov dx,288h ; 将端口地址 288H 移动到 DX 中
in al,dx ; 从 DX 指定的端口读取一个字节到 AL 中
mov dl,al ; 将 AL 中的值移动到 DL 中
mov ah,02h ; 将值 02H 移动到 AH 中
int 21h ; 执行 DOS 中断 21h,将 DL 中的值输出到屏幕上
mov dl,0dh ; 将值 0DH 移动到 DL 中,即回车符
int 21h ; 执行 DOS 中断 21h,输出回车符
mov dl,0ah ; 将值 0AH 移动到 DL 中,即换行符
int 21h ; 执行 DOS 中断 21h,输出换行符
mov dx,20h ; 将端口地址 20H 移动到 DX 中
mov al,20h ; 将值 20H 移动到 AL 中
out dx,al ; 将 AL 中的值输出到 DX 指定的端口
out 0a0h,al ; 将 AL 中的值输出到端口地址 0A0H
dec bl ; 将 BL 中的值减 1
jnz next ; 如果 BL 不为 0,跳转到标记 next
in al,21h ; 从端口地址 21H 读取一个字节到 AL 中
or al,08h ; 将 AL 中的值与 08H 按位或
out 21h,al ; 将 AL 中的值输出到端口地址 21H
sti ; 开启中断
mov ah,4ch ; 将值 4CH 移动到 AH 中,即结束程序
int 21h ; 执行 DOS 中断 21h
next: ; 标记 next
iret ; 中断返回指令
code ends ; 代码段结束
end start ; 程序结束
帮我解释一下这个代码code segment assume cs:code,ds:data start: mov ax,data mov ds,ax lea dx,buf ;定位buf mov ah,0ah int 21h ;输入字符进入缓冲区 mov dl,lf ;0ah赋值给dl mov ah,02h int 21h ;输出字符 mov bl,buf+1 ;在bl中录入字符 xor bh,bh ;把bh清零,目的:排除原来bx高八位的影响 mov si,0 do: cmp si,bx jg over ;在检查完所有字符后结束过程 mov al,buf[bx+2] ;为什么加2,因为buf的前两个字节所代表的值不需要遍历 dec bx cmp al,20h je do ;检查字符是否为空格,如果是空格,则跳过 mov dl,al ;否则放入dl中进行输出 mov ah,02h int 21h ;输出字符 jmp do over: mov ah,4ch ;带返回码结束,al=返回码 int 21h code ends end start
这段代码是一个简单的汇编程序,实现了从键盘输入一行字符并逐个输出,忽略空格。下面是代码的详细解释:
1. assume cs:code,ds:data:这一行是指定代码段(cs)和数据段(ds),这个程序中使用了两个段,代码段用于存放指令,数据段用于存放数据。
2. mov ax,data;mov ds,ax:这两行代码将数据段地址加载到ax寄存器中,再将ax的值存储到ds寄存器中,从而让ds寄存器指向了数据段。
3. lea dx,buf;mov ah,0ah;int 21h:这几行代码调用了21h中断,从键盘输入一行字符并存储到buf缓冲区中,其中buf的前两个字节表示缓冲区中字符的长度,后面的字节表示字符本身。lea指令是取地址,将buf的地址存储到dx寄存器中。
4. mov dl,lf;mov ah,02h;int 21h:这几行代码将lf(0ah)赋值给dl寄存器,然后调用21h中断输出lf字符,即回车符号。
5. mov bl,buf+1;xor bh,bh:这两行代码将buf+1处的字符存储到bl寄存器中,然后将bh寄存器清零。
6. mov si,0;do:这两行代码将si寄存器清零,并开始一个循环。
7. cmp si,bx;jg over:这两行代码比较si和bx的值,如果si大于bx,则跳转到over标签处结束循环。
8. mov al,buf[bx+2]:这行代码将buf[bx+2]处的字符存储到al寄存器中,因为buf的前两个字节表示字符长度,所以要加2。
9. dec bx;cmp al,20h;je do:这三行代码将bx减1,并检查al寄存器中的字符是否为空格,如果是,则跳过当前字符,继续往前遍历。
10. mov dl,al;mov ah,02h;int 21h:这三行代码将al寄存器中的字符存储到dl寄存器中,并调用21h中断输出该字符。
11. jmp do:如果当前字符不是空格,则跳转到do标签处继续遍历。
12. over:这行代码定义了一个标签,用于表示循环结束的位置。
13. mov ah,4ch;int 21h:这两行代码将4ch存储到ah寄存器中,表示程序结束并返回返回码。然后调用21h中断结束程序。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)