问大家一段汇编代码的作用是什么
发布网友
发布时间:2022-05-07 11:43
我来回答
共1个回答
热心网友
时间:2023-10-29 23:40
这是一段填充内存数据的子程序,在代码的第一行中:
DrawBG 是子程序的名称;
PROC 是表示子程序的伪指令;
COLOR:BYTE 表示本子程序有一个字节型的带入参数,变量名为COLOR。
具体功能见程序文中的注释。
;
DrawBG PROC COLOR:BYTE
; 将ax, bx, cx, es寄存器内容保存到堆栈中
push ax ; ax入栈
push bx ; bx入栈
push cx ; cx入栈
push es ; es入栈
;
;将段地址0a0000H写入es寄存器
mov ax,0a000h ;段地址
mov es,ax
;
;将偏移起始地址写入bx寄存器中
mov bx,00000h ;起始偏移
;
; 将带入参数COLOR写入al寄存器中
mov al,COLOR;绿色
;
; 将填充数据长度(8000)写入cx中
mov cx,40*25*8
;
;将al中数据填写到es段,偏移地址从0a0000H开始,长度为8000字节的内存区域中
.REPEAT
mov es:[bx],al
inc bx .
UNTILCXZ
;
;从堆栈中依次恢复保存的寄存器数据
pop es ; 恢复es数据
pop cx ; 恢复cx数据
pop bx ; 恢复bx数据
pop ax ; 恢复ax数据
;
RET ; 返回调用程序
;
DrawBG ENDP
; ENDP是用于标识子程序结束的伪指令
热心网友
时间:2023-10-29 23:40
这是一段填充内存数据的子程序,在代码的第一行中:
DrawBG 是子程序的名称;
PROC 是表示子程序的伪指令;
COLOR:BYTE 表示本子程序有一个字节型的带入参数,变量名为COLOR。
具体功能见程序文中的注释。
;
DrawBG PROC COLOR:BYTE
; 将ax, bx, cx, es寄存器内容保存到堆栈中
push ax ; ax入栈
push bx ; bx入栈
push cx ; cx入栈
push es ; es入栈
;
;将段地址0a0000H写入es寄存器
mov ax,0a000h ;段地址
mov es,ax
;
;将偏移起始地址写入bx寄存器中
mov bx,00000h ;起始偏移
;
; 将带入参数COLOR写入al寄存器中
mov al,COLOR;绿色
;
; 将填充数据长度(8000)写入cx中
mov cx,40*25*8
;
;将al中数据填写到es段,偏移地址从0a0000H开始,长度为8000字节的内存区域中
.REPEAT
mov es:[bx],al
inc bx .
UNTILCXZ
;
;从堆栈中依次恢复保存的寄存器数据
pop es ; 恢复es数据
pop cx ; 恢复cx数据
pop bx ; 恢复bx数据
pop ax ; 恢复ax数据
;
RET ; 返回调用程序
;
DrawBG ENDP
; ENDP是用于标识子程序结束的伪指令
热心网友
时间:2023-10-29 23:40
这是一段填充内存数据的子程序,在代码的第一行中:
DrawBG 是子程序的名称;
PROC 是表示子程序的伪指令;
COLOR:BYTE 表示本子程序有一个字节型的带入参数,变量名为COLOR。
具体功能见程序文中的注释。
;
DrawBG PROC COLOR:BYTE
; 将ax, bx, cx, es寄存器内容保存到堆栈中
push ax ; ax入栈
push bx ; bx入栈
push cx ; cx入栈
push es ; es入栈
;
;将段地址0a0000H写入es寄存器
mov ax,0a000h ;段地址
mov es,ax
;
;将偏移起始地址写入bx寄存器中
mov bx,00000h ;起始偏移
;
; 将带入参数COLOR写入al寄存器中
mov al,COLOR;绿色
;
; 将填充数据长度(8000)写入cx中
mov cx,40*25*8
;
;将al中数据填写到es段,偏移地址从0a0000H开始,长度为8000字节的内存区域中
.REPEAT
mov es:[bx],al
inc bx .
UNTILCXZ
;
;从堆栈中依次恢复保存的寄存器数据
pop es ; 恢复es数据
pop cx ; 恢复cx数据
pop bx ; 恢复bx数据
pop ax ; 恢复ax数据
;
RET ; 返回调用程序
;
DrawBG ENDP
; ENDP是用于标识子程序结束的伪指令
热心网友
时间:2023-10-29 23:40
这是一段填充内存数据的子程序,在代码的第一行中:
DrawBG 是子程序的名称;
PROC 是表示子程序的伪指令;
COLOR:BYTE 表示本子程序有一个字节型的带入参数,变量名为COLOR。
具体功能见程序文中的注释。
;
DrawBG PROC COLOR:BYTE
; 将ax, bx, cx, es寄存器内容保存到堆栈中
push ax ; ax入栈
push bx ; bx入栈
push cx ; cx入栈
push es ; es入栈
;
;将段地址0a0000H写入es寄存器
mov ax,0a000h ;段地址
mov es,ax
;
;将偏移起始地址写入bx寄存器中
mov bx,00000h ;起始偏移
;
; 将带入参数COLOR写入al寄存器中
mov al,COLOR;绿色
;
; 将填充数据长度(8000)写入cx中
mov cx,40*25*8
;
;将al中数据填写到es段,偏移地址从0a0000H开始,长度为8000字节的内存区域中
.REPEAT
mov es:[bx],al
inc bx .
UNTILCXZ
;
;从堆栈中依次恢复保存的寄存器数据
pop es ; 恢复es数据
pop cx ; 恢复cx数据
pop bx ; 恢复bx数据
pop ax ; 恢复ax数据
;
RET ; 返回调用程序
;
DrawBG ENDP
; ENDP是用于标识子程序结束的伪指令
热心网友
时间:2023-10-29 23:40
这是一段填充内存数据的子程序,在代码的第一行中:
DrawBG 是子程序的名称;
PROC 是表示子程序的伪指令;
COLOR:BYTE 表示本子程序有一个字节型的带入参数,变量名为COLOR。
具体功能见程序文中的注释。
;
DrawBG PROC COLOR:BYTE
; 将ax, bx, cx, es寄存器内容保存到堆栈中
push ax ; ax入栈
push bx ; bx入栈
push cx ; cx入栈
push es ; es入栈
;
;将段地址0a0000H写入es寄存器
mov ax,0a000h ;段地址
mov es,ax
;
;将偏移起始地址写入bx寄存器中
mov bx,00000h ;起始偏移
;
; 将带入参数COLOR写入al寄存器中
mov al,COLOR;绿色
;
; 将填充数据长度(8000)写入cx中
mov cx,40*25*8
;
;将al中数据填写到es段,偏移地址从0a0000H开始,长度为8000字节的内存区域中
.REPEAT
mov es:[bx],al
inc bx .
UNTILCXZ
;
;从堆栈中依次恢复保存的寄存器数据
pop es ; 恢复es数据
pop cx ; 恢复cx数据
pop bx ; 恢复bx数据
pop ax ; 恢复ax数据
;
RET ; 返回调用程序
;
DrawBG ENDP
; ENDP是用于标识子程序结束的伪指令
热心网友
时间:2023-10-29 23:40
这是一段填充内存数据的子程序,在代码的第一行中:
DrawBG 是子程序的名称;
PROC 是表示子程序的伪指令;
COLOR:BYTE 表示本子程序有一个字节型的带入参数,变量名为COLOR。
具体功能见程序文中的注释。
;
DrawBG PROC COLOR:BYTE
; 将ax, bx, cx, es寄存器内容保存到堆栈中
push ax ; ax入栈
push bx ; bx入栈
push cx ; cx入栈
push es ; es入栈
;
;将段地址0a0000H写入es寄存器
mov ax,0a000h ;段地址
mov es,ax
;
;将偏移起始地址写入bx寄存器中
mov bx,00000h ;起始偏移
;
; 将带入参数COLOR写入al寄存器中
mov al,COLOR;绿色
;
; 将填充数据长度(8000)写入cx中
mov cx,40*25*8
;
;将al中数据填写到es段,偏移地址从0a0000H开始,长度为8000字节的内存区域中
.REPEAT
mov es:[bx],al
inc bx .
UNTILCXZ
;
;从堆栈中依次恢复保存的寄存器数据
pop es ; 恢复es数据
pop cx ; 恢复cx数据
pop bx ; 恢复bx数据
pop ax ; 恢复ax数据
;
RET ; 返回调用程序
;
DrawBG ENDP
; ENDP是用于标识子程序结束的伪指令