导航菜单
首页 >  » 正文

汇编语言有哪几种类型 汇编语言如何实现用键盘控制图形的移动

汇编语言有哪几种类型

汇编语言的分类是按CPU分的。
■什么是汇编语言
汇编语言(Assembly Language)是面向机器的程序设计语言。
在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址妈。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。
汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。
■对于不同型号的计算机,有着不同的结构的汇编语言
汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。
汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。

汇编语言如何实现用键盘控制图形的移动

说明:
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 100的奇数和跟偶数和

奇数部分:
MOV R1 0 //用于存放累加后结果数据
MOV R0 100 //循环变量
START: MOV A R0 //将要判断的数据为二进制数据,只看最后一位便知奇偶
RRC A //最后低位移入“C”
JNC NO //“C”为“0”说明是偶数,跳至“NO”
ADD R1 R0
NO: CLR C
DJNZ R0 START //循环一百次后结束,累加结果保存在R1中
END
偶数部分:
MOV R1 0 //用于存放累加后结果数据
MOV R0 100 //循环变量
START: MOV A R0 //将要判断的数据为二进制数据,只看最后一位便知奇偶
RRC A //最后低位移入“C”
JC NO //“C”为“1”说明是奇数,跳走
ADD R1 R0
NO: CLR C
DJNZ R0 START //循环一百次后结束,累加结果保存在R1中
END
伙计,你看好了,这是51系列单片机下的汇编,我要的就是在代进位位情况下的右移,要的就是把数据的一位溢出到“C”中,以达到提取该位的目的。不溢出才真正坏菜。

相关推荐: