汇编代码,求单只数码管循环显示0-9的汇编代码
汇编代码,求单只数码管循环显示0-9的汇编代码详细介绍
本文目录一览: 什么是汇编 汇编代码是什么呀 详细些
fhqswcan 我跟你说啊
汇编语言(Assembly Language)是面向机器的程序设计语言。
在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址妈。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。
汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。
■对于不同型号的计算机,有着不同的结构的汇编语言
汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。
汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。
汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。
■什么是汇编语言
汇编语言(Assembly Language)是面向机器的程序设计语言。
在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址妈。这样用符号代替机器语盲的二进制码,就把机器语音变成了汇编语言。于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编语言把汇编程序翻译成机器语言的过程称为f汇编。
汇编语言比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。
■对于不同型号的计算机,有着不同的结构的汇编语言
汇编语言由于采用了助记符号来编写程序,比用机器语言的二进制代码编程要方便些,在一定程度上简化了编程过程。汇编语言的特点是用符号代替了机器指令代码,而且助记符与指令代码一一对应,基本保留了机器语言的灵活性。使用汇编语言能面向机器并较好地发挥机器的特性,得到质量较高的程序。
汇编语言是面向具体机型的,它离不开具体计算机的指令系统,因此,对于不同型号的计算机,有着不同的结构的汇编语言,而且,对于同一问题所编制的汇编语言程序在不同种类的计算机间是互不相通的。
汇编语言中由于使用了助记符号,用汇编语言编制的程序输入计算机,计算机不能象用机器语言编写的程序一样直接识别和执行,必须通过预先放入计算机的"汇编程序"的加工和翻译,才能变成能够被计算机识别和处理的二进制代码程序。用汇编语言等非机器语言书写好的符号程序称为源程序,运行时汇编程序要将源程序翻译成目标程序。目标程序是机器语言程序,它一经被安置在内存的预定位置上,就能被计算机的CPU处理和执行。
汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。但是,汇编语言用来编制系统软件和过程控制软件,其目标程序占用内存空间少,运行速度快,有着高级语言不可替代的用途。
■html属于汇编吗?
不属于汇编语言。它是Hypertext Markup Language的缩写,用来编写网页的语言.通常一个网页的网址最后面有.html或者.htm都是用这种语言编写的.
另外,它一般用来编写静态网页,现在最流行的动态语言有ASP,.NET和PHP等等.
汇编语言编写电子秒表代码
这个是我们老师给的,两个控制键控制四种状态,一个开关控制开始/清零,一个开关控制停止/继续,希望对LZ有用:
ORG 0000H
LJMP START
ORG 000BH
LJMP TT0
ORG 0030H
START:
MOV 43H,#0
MOV 42H,#0
MOV 41H,#0
MOV 40H,#0
SETB EA
SETB ET0
MOV TMOD,#00000001B
MOV TH0,#0D8H
MOV TL0,#0F0H
MAIN:
SETB P0.0
JB P0.0,QINGLING
MOV 43H,#0
MOV 42H,#0
MOV 41H,#0
MOV 40H,#0
CLR TR0
LJMP LOOP
QINGLING:
SETB P0.1
JNB P0.1,JIXU
CLR TR0
LJMP LOOP
JIXU:
SETB TR0
LOOP:
LCALL TIAOZHENG
LCALL XIANSHI
LJMP MAIN
TIAOZHENG:
MOV A,40H
CJNE A,#10,FANHUI
INC 41H
MOV 40H,#0
MOV A,41H
CJNE A,#10,FANHUI
INC 42H
MOV 41H,#0
MOV A,42H
CJNE A,#10,FANHUI
INC 43H
MOV 42H,#0
MOV A,43H
CJNE A,#10,FANHUI
MOV 43H,#0
FANHUI:
RET
XIANSHI:
MOV DPTR,#TAB
MOV A,40H
MOVC A,@A+DPTR
MOV P1,A
MOV P2,#11111110B
;LCALL DELAY
MOV P2,#11111111B
MOV A,41H
MOVC A,@A+DPTR
MOV P1,A
MOV P2,#11111101B
;LCALL DELAY
MOV P2,#11111111B
MOV A,42H
MOVC A,@A+DPTR
ANL A,#11111110B
MOV P1,A
MOV P2,#11111011B
;LCALL DELAY
MOV P2,#11111111B
MOV A,43H
MOVC A,@A+DPTR
MOV P1,A
MOV P2,#11110111B
;LCALL DELAY
MOV P2,#11111111B
RET
TT0:
INC 40H
MOV TH0,#0D8H
MOV TL0,#0F0H
RETI
TAB:
DB 03H 9FH 25H 0DH 99H 49H 41H 1FH 01H 09H
秒表可以用定时器来实现,举例如下:
KEYVAL EQU 30H
DAT EQU 33H
SCANLED EQU 39H
CLK EQU 77H
SEC EQU 78H
SEC1 EQU 79H
SEC2 EQU 7AH
DOT BIT 00H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0ISR ;50ms定时
ORG 001BH
LJMP T1ISR ;扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#2
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV CLK,#0
SETB IT0
SETB EX0
CLR TR0
CLR ET0
MOV R2,#0
SETB TR1
SETB ET1
SETB EA
LOOP:
MOV A,KEYVAL
LOOP1:
JNZ LOOP2 ;启动
SETB TR0
SETB ET0
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3 ;暂停
CLR TR0
CLR ET0
SJMP LOOP
LOOP3:
DEC A
JNZ LOOP ;清零
MOV 36H,#0
MOV 35H,#0
MOV 34H,#0
MOV 33H,#0
SJMP LOOP
EXTINT0:
PUSH ACC
INC KEYVAL
MOV A,KEYVAL
CJNE A,#3,EXT00
EXT00:
JC EXT01
MOV KEYVAL,#0
EXT01:
POP ACC
RETI
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#2,T0ISRE
MOV CLK,#0
INC 36H
MOV A,36H
CJNE A,#10,T0ISRE
MOV 36H,#0
INC 35H
MOV A,35H
CJNE A,#10,T0ISRE
MOV 35H,#0
INC 34H
MOV A,34H
CJNE A,#6,T0ISRE
MOV 34H,#0
INC 33H
MOV A,33H
CJNE A,#10,T0ISRE
MOV 33H,#0
T0ISRE:
POP ACC
RETI
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T101
MOV P2,#01H
SETB DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
CLR DOT
SJMP T1DIS
T102:
DEC A
JNZ T103
MOV P2,#04H
SETB DOT
SJMP T1DIS
T103:
MOV P2,#08H
CLR DOT
T1DIS:
MOV A,@R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#4,T1END
MOV SCANLED,#0
T1END:
POP ACC
RETI
LEDTAB: DB 0FCH ;"0" 00H
DB 60H ;"1" 01H
DB 0DAH ;"2" 02H
DB 0F2H ;"3" 03H
DB 66H ;"4" 04H
DB 0B6H ;"5" 05H
DB 0BEH ;"6" 06H
DB 0E0H ;"7" 07H
DB 0FEH ;"8" 08H
DB 0F6H ;"9" 09H
DB 0EEH ;"A" 0AH
DB 3EH ;"B" 0BH
DB 9CH ;"C" 0CH
DB 7AH ;"D" 0DH
DB 9EH ;"E" 0EH
DB 8EH ;"F" 0FH
DB 00H ;" " 10H
END
求单只数码管循环显示0-9的汇编代码
ORG
0000H
SJMP
MAIN
ORG
030H
MAIN:
MOV
R1,#00H
MOV
A,R1
D1:
ANL
A,#0FH
MOV
DPTR,#TAB
MOVC
A,@A+DPTR
;查表
MOV
P0,A
;P0口输出,显示数字
ACALL
DELAY
INC
R1
MOV
A,R1
;A加1
CJNE
A,#10,D1
;判断A是否到达10
LJMP
MAIN
;当A达到10跳回主函数,重新赋值为0
DELAY:
MOV
R2,#05H
;延时
D2:
MOV
R3,#0FFH
D3:
MOV
R4,#0FFH
DJNZ
R4,$
DJNZ
R3,D3
DJNZ
R2,D2
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;数值1到9的共阳极编码
END
补充说明两点:
1、程序下载到目标板之后,注意一下晶振频率,如果显示效果不佳,可以通过修改延时参数,调节刷新频率。
2、这里采用的是共阳极编码二极管(公共端已经接VCC了),下载程序前,请注意自己到网上找编码,代替倒数第二行代码。
求用汇编语言编写的小游戏代码
前两天刚编了一个“贪吃蛇”的游戏。虽然是小游戏,功能非常简单,整整做了两天才出来,但代码300多行。
code
segment
assume
cs:code,
ds:code
org
100h
start:
push
0b800h
pop
es
push
cs
pop
ds
mov
cx,
0fffh
;========清屏
rep
stosw
drawfen:
;========分数标签
lea
si,
fen
mov
di,
160+10
call
print
sub
di,
4
mov
[fi],
di
;label
cursor
drawfoot:
;========摆放食物
mov
di,
160+40
mov
ax,
0a05h
mov
cl,
8
drf:
add
di,
160*2+90
stosw
loop
drf
drawqian:
;========绘制墙壁
xor
di,
di
mov
cl,
80
mov
ax,
0c1fh
repnz
stosw
mov
di,
160*24
mov
cl,
80
mov
ax,
0c1eh
repnz
stosw
xor
di,
di
mov
cl,
24
mov
ax,
0c10h
q1:
mov
es:[di],
ax
add
di,
160
loop
q1
mov
di,
158
mov
cl,
24
mov
ax,
0c11h
q2:
mov
es:[di],
ax
add
di,
160
loop
q2
;============================初始化蛇的数据
inits:
mov
bp,
0
;bp=方向,
ch=节数,
[snake+_newxy]=xy坐标
mov
ch,
3
mov
word
ptr[snake+_newxy],
_center
mainl:
;游戏开始
call
movsnake
call
operkey
jmp
short
mainl
exit:
lea
si,
over
mov
di,
_center
call
print
int
20h
;结束
;===========================移动头
movsnake:
lea
si,
snake
mov
bx,
word
ptr[si+_newxy]
;get
currentxy
push
bx
add
bx,
word
ptr[dir+bp]
;add
offsetxy
mov
ax,
es:[bx]
cmp
al,
01h
;撞到自己的身体
je
exit
cmp
al,
10h
;撞到墙
je
exit
cmp
al,
11h
;撞到墙
je
exit
cmp
al,
1eh
;撞到墙
je
exit
cmp
al,
1fh
;撞到墙
je
exit
cmp
al,
05h
;吃食物
jne
mgo
call
eat
mgo:
mov
word
ptr[si+_newxy],bx
;update
mov
word
ptr
es:[bx],
0e02h
;drawhead
('_')
pop
bx
mov
word
ptr[si+_oldxy],
bx
;save
oldxy
add
si,
_len
;==============移动并绘制身体
mov
cl,
ch
dec
cl
jz
mb
mlin:
push
word
ptr[si+_newxy]
;save
currentxy
mov
di,
word
ptr[si-_len+_oldxy]
;get
prev.oldxy
mov
word
ptr[si+_newxy],
di
;update
currentxy
mov
ax,
1e01h
;draw
body
stosw
pop
word
ptr[si+_oldxy]
;save
oldxy
add
si,
_len
;get
next
dec
cl
jnz
mlin
mov
di,
word
ptr[si-_len+_oldxy]
;erase
the
last!
xor
ax,
ax
stosw
mb:
ret
;=======================吃食物
eat:
inc
ch
;
jns
v0
jmp
exit
v0:
mov
word
ptr
es:[bx],
0
;erase
it
mov
di,
bx
add
di,
90
cmp
di,
0f00h
jb
v2
mov
di,
dx
and
di,
0f00h
v2:mov
word
ptr
es:[di],
0a05h
mov
di,
word
ptr
[fi]
;只能显示到99
cmp
byte
ptr
es:[di],'9'
jb
v1
mov
byte
ptr
es:[di],
'0'
sub
di,
2
v1:
inc
byte
ptr
es:[di]
ret
;=====================显示字符串
print:
mov
ah,
0dh
sa:
lodsb
stosw
cmp
al,
0
jnz
sa
ret
;=====================键盘操纵区
operkey:
;the
operator
key
for
game
push
bx
cx
mov
ah,
0
int
1ah
add
dx,
4
mov
bx,
dx
wt:
int
1ah
cmp
dx,
bx
jb
wt
pop
cx
bx
in
al,
60h
k0:
cmp
al,
left
jne
k1
mov
bp,
0
k1:
cmp
al,
right
jne
k2
mov
bp,
2
k2:
cmp
al,
up
jne
k3
mov
bp,
4
k3:
cmp
al,
down
jne
k4
mov
bp,
6
k4:
cmp
al,
escape
jne
retk
jmp
exit
retk:
ret
;========================数据区
over
db
'game
over',
0
fen
db
'score=000',
0
fi
dw
?
dir
dw
-2,
+2,
-160,
+160
_center
equ
160*12+60
_newxy
equ
0
_oldxy
equ
2
_len
equ
4
left
equ
75
right
equ
77
up
equ
72
down
equ
80
escape
equ
1
snake:
code
ends
end
start
关于单片机汇编代码问题
ORG 0000H
SJMP MAIN
ORG 001BH ;定时器1中断程序入口
AJMP TIMER0 ;跳转到定时器中断程序
ORG 0030H 主程序起始地址
MAIN:MOV TMOD,#20H ;设置定时器1工作方式2 自动重装
MOV TL1,#56 ;装入定时器初值低8 位
MOV TH1,#56 ;装入定时器初值高8 位
SETB ET1 ;开定时器1中断
SETB EA ;开总中断
SETB TR1 ;开启定时器1
MOV R2,#0 ;将所用寄存器清0
MOV R3,#0
MOV R4,#0
MOV R5,#0
MOV R6,#0
MOV DPTR,#TABLE ;调入表格地址
LOOP:ACALL DISP ;调用显示子程序
AJMP LOOP ;死偱环,不停地显示
DISP:MOV A,R4 显示子程序 R4存的是 秒值 将其放入A中当被 除数
MOV B,#10 ;除数只能放入B中
DIV AB ;相除A是商,B是余数
XCH A,B ;交换结果取余数即秒
MOVC A,@A+DPTR ;查表
MOV P0,A ;送段码
MOV P2,#1 ;送位码
ACALL DELAY ;延时,为使显示稳定,延时太长会闪烁,太短亮度也不行
XCH A,B ;交换结果取商数即10秒
MOVC A,@A+DPTR;查表
MOV P0,A ;送段码
MOV P2,#2 ;送位码
ACALL DELAY ;延时
MOV A,R5;059/10=05.9 R5存的是分钟,处理办法完全和秒一样
MOV B,#10
DIV AB;A=5,B=9
XCH A,B 取B 即分钟数
MOVC A,@A+DPTR
ORL A,#80H ;此句不应该要 既然查表得到段码直接送去显示就行了,对了是加个小数点
MOV P0,A
MOV P2,#4
ACALL DELAY
XCH A,B
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#8
ACALL DELAY
MOV A,R6;059/10=05.9 R6存的是小时,处理办法完全和分一样
MOV B,#10
DIV AB;A=5,B=9
XCH A,B
MOVC A,@A+DPTR
ORL A,#80H ;也要加个小数点
MOV P0,A
MOV P2,#10H
ACALL DELAY
XCH A,B
MOVC A,@A+DPTR
MOV P0,A
MOV P2,#20H
ACALL DELAY
RET
TIMER0:INC R2 ;定时器中断程序
CJNE R2,#200,LL
MOV R2,#0
INC R3
CJNE R3,#50,LL
MOV R3,#0 中断200*50次=1000ms=1S
INC R4
CJNE R4,#60,LL ; 秒够60清0,分钟加1
MOV R4,#0
INC R5
CJNE R5,#60,LL ;分钟够60清0,小时加1
MOV R5,#0
INC R6
CJNE R6,#24,LL ;小时够24清0
MOV R6,#0
LL:RETI
TABLE:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
DELAY:MOV 40H,250
DJNZ 40H,$
RET
易语言怎么写汇编代码
问题一:易语言 调用汇编代码 置汇编代码()
push(0)
push(1)
push(十六到十(“428E0000”))
push(十六到十(“431D0000”))
mov_ecx(十六到十(“77758788”))
mov_eax(十六到十(“00442840”))
call_eax()
ret()
调用函数(进程ID,取汇编代码())
问题二:易语言汇编代码怎么写? 我勒个去 没分的
只给你思路不给你成品吧 都没分
要么去下载个易语言外置的插件 叫wonderwall (没记错的话) 他有个直接写汇编的功能
第二个方法 就是用 置入代码() 这个参数是字节集来的 你要用a *** 翻译把汇编翻译成机器码 然后换成十进制 就是字节集了 就直接调用这个 置入代码 就行了
问题三:易语言汇编代码 15分 我勒个去 没分的 只给你思路不给你成品吧 都没分 要么去下载个易语言外置的插件 叫wonderwall (没记错的话) 他有个直接写汇编的功能 第二个方法 就是用 置入代码() 这个参数是字节集来的 你要用a *** 翻译把汇编翻译成机器码 然后换成十进制 就是字节集了 就直接调用这个 置入代码 就行了
问题四:在易语言中如何写汇编代码?最好具体一点 置入代码
131,172,1,146,4,0,0,5}}
问题五:在易语言中这个汇编代码应该怎么写 置入代码()易语言核心支持库>其他。比如
mov ax,0100H
mov bx,0200H
add ax,bx
置入代码 ({102,184,0,1,102,187,0,2,102,1,216})
问题六:易语言调用汇编书写下面代码 置汇编代码() push(0) push(1) push(十六到十(“428E0000”)) push(十六到十(“431D0000”)) mov_ecx(十六到十(“77758788”)) mov_eax(十六到十(“00442840”)) call_eax() ret() 调用函数(进程ID,取汇编代码())
问题七:如何用易语言汇编代码写出这个 20分 用超级模块。里面有汇编代码
call的汇编原型已经在下面了,你只需要转成汇编代码就好了
问题八:汇编代码转易语言 需要一个汇编模块 你用超级模块吧
问题九:这个CE里的汇编怎么写到易语言里 百度一下 易语言清风汇编模块 添加进去即可汇编
问题十:怎么用易语言写出这段汇编命令? 10分 置入代码({186,40,48,80,4,184,104,109,69,0,139,0,184,152,46,69,0,255,208})
跑马灯 汇编代码 求注释?
汇编代码球权是跑马灯,主要适用于正月十五的一种展示
汇编语言编程,写代码
;---------------------------
ASSUME CS:CC, DS:QW
;---------------------------
QW SEGMENT
M_1 DB 12, 13, 10, -5, -85, 37, 92, -25, 94, 10, -36
DB 1, 100, 12, -37, 85, -6, 28, 125, 34, 17, -92
LLL EQU $ - M_1
M_P DB 101 DUP(0)
M_N DB 101 DUP(0)
MSG DB 13, 10, 'Press any key to continue ... $'
O_P DB 13, 10, '+$'
O_N DB 13, 10, '-$'
QW ENDS
;---------------------------
CC SEGMENT
START:
MOV AX, QW
MOV DS, AX
;
CALL TONGJI
CALL DISPLAY
EXIT:
LEA DX, MSG
MOV AH, 9
INT 21H
MOV AH, 7
INT 21H
MOV AH, 4CH
INT 21H ;返回DOS
;---------------------------
TONGJI:
MOV BX, OFFSET M_1
MOV SI, OFFSET M_P
MOV DI, OFFSET M_N
MOV CX, LLL
LP: MOV AL, [BX]
CMP AL, 128
JB ZHENG
MOV [DI + 1], AL
INC DI
INC M_N
JMP NEXT
ZHENG:
MOV [SI + 1], AL
INC SI
INC M_P
NEXT:
INC BX
LOOP LP
RET
;---------------------------
DISPLAY:
LEA DX, O_P
MOV AH, 9
INT 21H
MOV AL, M_P
MOV AH, 0
CALL OUTPUT
LEA DX, O_N
MOV AH, 9
INT 21H
MOV AL, M_N
MOV AH, 0
CALL OUTPUT
RET
;---------------------------
OUTPUT:
MOV BX, 10
MOV CX, 0
OL1:MOV DX, 0
DIV BX
ADD DL, '0'
PUSH DX
INC CX
CMP AX, 0
JNZ OL1
MOV AH, 2
OL2:POP DX
INT 21H
LOOP OL2
RET
;---------------------------
CC ENDS
END START
;---------------------------
程序执行结果如下:
C:\MASM>ww
+15
-7
Press any key to continue ...
C:\MASM>
汇编语言写出完整代码
dseg segment A db 0 B db 2 C db 3dseg endsassume cs:cseg, ds:dsegcseg segmentstart: mov ax, dseg mov ds, ax xor bx, bx ;flag cmp a, 0 jnz z2 or bl,1z2: cmp b, 0 jnz z3 or bl, 2 z3: cmp c, 0 jnz z4 or bl, 4z4: cmp bl, 7 jz set7 ;Question(3) test bl,7;Question(1) jnz set0 ;sort Question(2) mov al, a cmp al, b ja n1 xchg al,b mov a, aln1: cmp al, c ja n2 xchg al,c mov a, aln2: mov al, b cmp al, c ja n3 xchg al, c mov b, aln3: jmp exitset0: mov a, 0 mov b, 0 mov c, 0 jmp exitset7: mov a, 1 mov b, 1 mov c, 1exit: mov ax, 4c00h int 21hcseg endsend start
问下大家,这段汇编代码的作用是什么
这段汇编代码实现的功能: 将一个双字节无符号数值进行逆序显示。例如一个数的值为12345,将该数值代入此段汇编程序运行后,将按逆序显示54321。显示操作通过系统调用 INT 10H实现。详细描述见下面的代码注释。
;
; PrintHexUseDec : 子程序名称
; PROC : 定义子程序伪指令
; num:WORD : num为代入数值,类型为双字节
; color:BYTE : color显示前景颜色,字节型
;
PrintHexUseDec PROC num:WORD,color:BYTE
; 依序将ax,bx,cx,dx寄存器存入堆栈保存
push ax
push bx
push cx
push dx
; 调用显示模式切换子程序
; lNVOKE : 伪指令,表示调用子程序操作
INVOKE SwitchDisplayMode,0
;
mov ax,num ; 代入的数值送ax寄存器
mov bx,10 ; 数值10送入bx寄存器
mov cx,0 ; cx寄存器清0( 用于位数计数 )
;
.REPEAT
mov dx,0 ; dx寄存器清0(被除数高16位)
div bx ; dx,ax除以bx(10), 商存ax, 余数存dx
add dx,30h ; 余数+30H,转为可显示数字
push dx ; 转换结果存入堆栈中
inc cx ; 位数计数值+1
.UNTIL ax == 0 ; 重复循环至商为0
;
.REPEAT
pop dx ;从堆栈取一位转换结果
mov ah,0eh ;ah送0,置INT 10H功能(显示)
mov al,dl ;待显示字符送入al中
mov bh,0 ; bh寄存器置0
mov bl,color ;bl寄存器置前景颜色值(coIor)
int 10h ; 调用INT10H,显示al中内容
.UNTILCXZ ; 位计数cx-1,非0循环以上操作
;
; 调用设置显示模式子程序
INVOKE SwitchDisplayMode,2
;
; 恢复dx,cx,bx,ax寄存器内容
pop dx
pop cx
pop bx
pop ax
RET ; 返回调用程序