org 100h MOV AX,2000H MOV DS,AX MOV SI,0 MOV CL,10H XOR AX,AX XOR BX,BX PPE1: MOV [SI],AL ADD BX,[SI] INC SI INC AL DEC CL JNZ PPE1 ret写出程序中每条指令的作用,以及熟练理解程序执行过程中各个寄存器值的变化情况
时间: 2024-02-10 07:33:52 浏览: 40
这段程序的作用是将0~9的数字加起来,并将结果存储在BX寄存器中。下面是每条指令的作用:
- org 100h:将程序的起始地址设置为100h。
- MOV AX, 2000H:将2000H存储在AX寄存器中。
- MOV DS, AX:将AX寄存器的值2000H存储在DS段寄存器中。
- MOV SI, 0:将值0存储在SI寄存器中。
- MOV CL, 10H:将10H存储在CL寄存器中,用于循环计数。
- XOR AX, AX:将AX寄存器的值清零。
- XOR BX, BX:将BX寄存器的值清零。
- MOV [SI], AL:将AL寄存器的值存储在SI寄存器指向的内存地址中。
- ADD BX, [SI]:将SI寄存器指向的内存地址中的值加到BX寄存器中。
- INC SI:将SI寄存器的值加1,指向下一个内存地址。
- INC AL:将AL寄存器的值加1。
- DEC CL:将CL寄存器的值减1,用于循环计数。
- JNZ PPE1:如果CL寄存器的值不为0,则跳转到PPE1标签处执行循环体,否则继续执行下一条指令。
- ret:程序返回。
程序执行过程中,AX寄存器的值为2000H,DS段寄存器的值也为2000H。SI寄存器的值从0开始,每次循环加1,最后指向内存地址10H处。CL寄存器的值从10H开始,每次循环减1,最后为0。AL寄存器的值从0开始,每次循环加1,最后为9。BX寄存器的值为0开始,每次循环加上SI寄存器指向的内存地址中的值,最后存储了0~9的数字之和。
相关问题
org 100h mov di,0 mov cl,0fh xor ax,ax ppe1:mov [di],al inc di inc al dec cl jnz ppe1 mov cx,10h ppe2:mov [di],al inc di dec al loop ppe2 int 20h ret这个的CX的作用是什么
在这个程序中,CX的作用是控制一个循环的次数。在标记为ppe2的位置,程序使用了LOOP指令,该指令将减小CX寄存器的值,并检查其是否为0。如果CX不为0,则跳转到标记为ppe2的位置,否则程序继续执行下一条指令。在本程序中,LOOP指令将循环10次,每次向内存写入16个字节的数据。因此,程序将向内存中写入160个字节的数据。
assume ds:data, cs:code data segment db 'welcome to masm!' db 2H,24H,71H data ends code segment start: mov ax,data mov ds,ax mov ax,0B800H mov es,ax mov cx,10h mov bx,0 mov si,0 s0:mov ax,[bx] mov es:[0720h+si+bx],ax mov al,2h mov byte ptr es:[0721h+si+bx],al inc bx inc si loop s0 mov cx,10h mov bx,0 mov si,0 s1:mov ax,[bx] mov es:[07c0h+si+bx],ax mov al,24h mov byte ptr es:[07c1h+si+bx],al inc bx inc si loop s1 mov cx,10h mov bx,0 mov si,0 s2:mov ax,[bx] mov es:[0860h+si+bx],ax mov al,71h mov byte ptr es:[0861h+si+bx],al inc bx inc si loop s2 mov ax,4c00h int 21h code ends end start 改成子程序形式
下面是将代码改写成子程序形式的程序:
```
assume ds:data, cs:code
data segment
db 'welcome to masm!'
db 2H,24H,71H
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
call print_string_attr_1
call print_string_attr_2
call print_string_attr_3
mov ax,4c00h
int 21h
print_string_attr_1:
mov cx,10h
mov bx,0
mov si,0
s0:
mov ax,[bx]
mov es:[0720h+si+bx],ax
mov al,2h
mov byte ptr es:[0721h+si+bx],al
inc bx
inc si
loop s0
ret
print_string_attr_2:
mov cx,10h
mov bx,0
mov si,0
s1:
mov ax,[bx]
mov es:[07c0h+si+bx],ax
mov al,24h
mov byte ptr es:[07c1h+si+bx],al
inc bx
inc si
loop s1
ret
print_string_attr_3:
mov cx,10h
mov bx,0
mov si,0
s2:
mov ax,[bx]
mov es:[0860h+si+bx],ax
mov al,71h
mov byte ptr es:[0861h+si+bx],al
inc bx
inc si
loop s2
ret
code ends
end start
```
以上程序将每个循环改写成了一个子程序,分别是print_string_attr_1、print_string_attr_2和print_string_attr_3。在主程序中调用这三个子程序即可完成字符串及属性值输出到80×25彩色字符模式显示缓冲区的操作。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)