汇编语言如何实现用键盘控制图形的移动?
展开全部
说明:
1、本程序只识别三个按键:光标左移键、光标右移键和Esc键;
2、按光标左移键或光标右移键,执行相应的功能;按Esc键,结束程序。
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
Cursor_Row DB 21
Cursor_Col DB 36
SetCursor EndP
; -----------------------------------------
KBEsc equ 11BH
KBLeft equ 4BH
KBRight equ 4DH
String db '<---->$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
xor bh,bh
mov ah,8 ;读光标位置的字符和属性
int 10h
mov bh,ah ;保存字符属性值
Disp_Str: call SetCursor ;设置光标位置
Output String ;显示一个字符串
Read_Key: xor ah,ah
int 16h ;接收按键
cmp ax,KBEsc ;Esc?
jz Exit_Proc ;结束程序,返回操作系统
cmp ah,KBLeft ;左箭头?
jnz $+10 ;不是,转去看是否右键
mov word ptr Inc_or_Dec,0efeh ;是,当前列号减1
jmp Cursor_move
cmp ah,KBRight ;右箭头?
jnz Read_Key ;不是,接收下一个按键
mov word ptr Inc_or_Dec,06feh ;是,当前列号加1
Cursor_move:mov bl,ah ;保存按键方向
push bx
xor bh,bh
mov ah,3 ;取当前光标位置,窗口右下角坐标
int 10h
pop bx
inc dl ;列号加1
mov ch,Cursor_Row ;窗口左上角行号
mov cl,Cursor_Col ;窗口左上角列号
.IF bl == KBLeft && cl == 0 ;按左键,但已经到最左侧,不移动
jmp Read_Key
.ENDIF
.IF bl == KBRight && dl == 79 ;按右键,但已经到最右侧,不移动
jmp Read_Key
.ENDIF
mov ah,7 ;窗口显示内容下滚
mov al,1 ;下滚一行
int 10h
Inc_or_Dec: inc Cursor_Col ;当前列号减1或加1
jmp Disp_Str
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
1、本程序只识别三个按键:光标左移键、光标右移键和Esc键;
2、按光标左移键或光标右移键,执行相应的功能;按Esc键,结束程序。
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
Cursor_Row DB 21
Cursor_Col DB 36
SetCursor EndP
; -----------------------------------------
KBEsc equ 11BH
KBLeft equ 4BH
KBRight equ 4DH
String db '<---->$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
xor bh,bh
mov ah,8 ;读光标位置的字符和属性
int 10h
mov bh,ah ;保存字符属性值
Disp_Str: call SetCursor ;设置光标位置
Output String ;显示一个字符串
Read_Key: xor ah,ah
int 16h ;接收按键
cmp ax,KBEsc ;Esc?
jz Exit_Proc ;结束程序,返回操作系统
cmp ah,KBLeft ;左箭头?
jnz $+10 ;不是,转去看是否右键
mov word ptr Inc_or_Dec,0efeh ;是,当前列号减1
jmp Cursor_move
cmp ah,KBRight ;右箭头?
jnz Read_Key ;不是,接收下一个按键
mov word ptr Inc_or_Dec,06feh ;是,当前列号加1
Cursor_move:mov bl,ah ;保存按键方向
push bx
xor bh,bh
mov ah,3 ;取当前光标位置,窗口右下角坐标
int 10h
pop bx
inc dl ;列号加1
mov ch,Cursor_Row ;窗口左上角行号
mov cl,Cursor_Col ;窗口左上角列号
.IF bl == KBLeft && cl == 0 ;按左键,但已经到最左侧,不移动
jmp Read_Key
.ENDIF
.IF bl == KBRight && dl == 79 ;按右键,但已经到最右侧,不移动
jmp Read_Key
.ENDIF
mov ah,7 ;窗口显示内容下滚
mov al,1 ;下滚一行
int 10h
Inc_or_Dec: inc Cursor_Col ;当前列号减1或加1
jmp Disp_Str
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
展开全部
说明:
1、本程序只识别三个按键:光标左移键、光标右移键和Esc键;
2、按光标左移键或光标右移键,执行相应的功能;按Esc键,结束程序。
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
Cursor_Row DB 21
Cursor_Col DB 36
SetCursor EndP
; -----------------------------------------
KBEsc equ 11BH
KBLeft equ 4BH
KBRight equ 4DH
String db '<---->$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
xor bh,bh
mov ah,8 ;读光标位置的字符和属性
int 10h
mov bh,ah ;保存字符属性值
Disp_Str: call SetCursor ;设置光标位置
Output String ;显示一个字符串
Read_Key: xor ah,ah
int 16h ;接收按键
cmp ax,KBEsc ;Esc?
jz Exit_Proc ;结束程序,返回操作系统
cmp ah,KBLeft ;左箭头?
jnz $+10 ;不是,转去看是否右键
mov word ptr Inc_or_Dec,0efeh ;是,当前列号减1
jmp Cursor_move
cmp ah,KBRight ;右箭头?
jnz Read_Key ;不是,接收下一个按键
mov word ptr Inc_or_Dec,06feh ;是,当前列号加1
Cursor_move:mov bl,ah ;保存按键方向
push bx
xor bh,bh
mov ah,3 ;取当前光标位置,窗口右下角坐标
int 10h
pop bx
inc dl ;列号加1
mov ch,Cursor_Row ;窗口左上角行号
mov cl,Cursor_Col ;窗口左上角列号
.IF bl == KBLeft && cl == 0 ;按左键,但已经到最左侧,不移动
jmp Read_Key
.ENDIF
.IF bl == KBRight && dl == 79 ;按右键,但已经到最右侧,不移动
jmp Read_Key
.ENDIF
mov ah,7 ;窗口显示内容下滚
mov al,1 ;下滚一行
int 10h
Inc_or_Dec: inc Cursor_Col ;当前列号减1或加1
jmp Disp_Str
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
注意:
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的不同平台之间不可直接移植。[1]
许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。
汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。[
1、本程序只识别三个按键:光标左移键、光标右移键和Esc键;
2、按光标左移键或光标右移键,执行相应的功能;按Esc键,结束程序。
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
Cursor_Row DB 21
Cursor_Col DB 36
SetCursor EndP
; -----------------------------------------
KBEsc equ 11BH
KBLeft equ 4BH
KBRight equ 4DH
String db '<---->$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
xor bh,bh
mov ah,8 ;读光标位置的字符和属性
int 10h
mov bh,ah ;保存字符属性值
Disp_Str: call SetCursor ;设置光标位置
Output String ;显示一个字符串
Read_Key: xor ah,ah
int 16h ;接收按键
cmp ax,KBEsc ;Esc?
jz Exit_Proc ;结束程序,返回操作系统
cmp ah,KBLeft ;左箭头?
jnz $+10 ;不是,转去看是否右键
mov word ptr Inc_or_Dec,0efeh ;是,当前列号减1
jmp Cursor_move
cmp ah,KBRight ;右箭头?
jnz Read_Key ;不是,接收下一个按键
mov word ptr Inc_or_Dec,06feh ;是,当前列号加1
Cursor_move:mov bl,ah ;保存按键方向
push bx
xor bh,bh
mov ah,3 ;取当前光标位置,窗口右下角坐标
int 10h
pop bx
inc dl ;列号加1
mov ch,Cursor_Row ;窗口左上角行号
mov cl,Cursor_Col ;窗口左上角列号
.IF bl == KBLeft && cl == 0 ;按左键,但已经到最左侧,不移动
jmp Read_Key
.ENDIF
.IF bl == KBRight && dl == 79 ;按右键,但已经到最右侧,不移动
jmp Read_Key
.ENDIF
mov ah,7 ;窗口显示内容下滚
mov al,1 ;下滚一行
int 10h
Inc_or_Dec: inc Cursor_Col ;当前列号减1或加1
jmp Disp_Str
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束
注意:
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的不同平台之间不可直接移植。[1]
许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。
汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。[
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
接受按键,判断按键,清屏,根据按键重画图形
刷新指定行这个问题问的是8086文本显示方式么?
是的话直接清空显存就行了
刷新指定行这个问题问的是8086文本显示方式么?
是的话直接清空显存就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询