求助!!汇编小程序:显示变色二进制数字。

作者&投稿:蠹达 (若有异议请与网页底部的电邮联系)
求助!!汇编小程序:显示变色二进制数字。~

推箱子小游戏 .386 .model flat,stdcall option casemap:none include CBox.inc include StoreHouse.inc .const MAP_TOP equ 32 MAP_LEFT equ 1 .data xBmBack dd 0 xBmWall dd 30 xBmRoad dd 60 xBmBox1 dd 90 xBmBox2 dd 120 xBmObject dd 150 xBmMan dd 180 szCaption db 'RedBox',0 szLoadError db 'Load Resource Error! ',0 szAlreadyMaxGate db 'Already Max Gate!',0 szOutOfRange db 'Out of Range!',0 szSuccessMsg db 'Your are success!!!',13,10,'Are you want to next gate?',0 FmtStr db 'val = %d',0 FmtGate db ' - No.%d',0 .data? bmToolbar dd ? BackDc dd ? hBitMap dd ? szErrorMessage db 256 dup (?) Map db 14D*12D dup (?) ; 14 x 12 Grid ManXPos dd ? ManYPos dd ? CurrGate dd ? CurrStep dd ? .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke GetCommandLine mov CommandLine,eax invoke InitCommonControls invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT invoke ExitProcess,eax WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD LOCAL wc:WNDCLASSEX LOCAL msg:MSG mov wc.cbSize,SIZEOF WNDCLASSEX mov wc.style,CS_HREDRAW or CS_VREDRAW mov wc.lpfnWndProc,OFFSET WndProc mov wc.cbClsExtra,NULL mov wc.cbWndExtra,DLGWINDOWEXTRA push hInst pop wc.hInstance mov wc.hbrBackground,COLOR_BTNFACE+1 mov wc.lpszMenuName,OFFSET MenuName mov wc.lpszClassName,OFFSET ClassName invoke LoadIcon,NULL,IDI_APPLICATION mov wc.hIcon,eax mov wc.hIconSm,eax invoke LoadCursor,NULL,IDC_ARROW mov wc.hCursor,eax invoke RegisterClassEx,addr wc invoke CreateDialogParam,hInstance,addr DlgName,NULL,addr WndProc,NULL invoke ShowWindow,hWnd,SW_SHOWNORMAL invoke UpdateWindow,hWnd .while TRUE invoke GetMessage,addr msg,NULL,0,0 .BREAK .if !eax invoke TranslateMessage,addr msg invoke DispatchMessage,addr msg .endw mov eax

题目不详。几位数码管,2 位?是不是51汇编 ?20H里是预先放好的吗?

1Vegas Video 4.0
Vegas4.0是PC平台上用于视频编辑、音频制作、合成、字幕和编码的专业产品。它具有漂亮直观的界面和功能强大的音视频制作工具,为DV视频、音频录制、编辑和混合、流媒体内容作品和环绕声制作提供完整的集成的解决方法。
Vegas4.0为专业的多媒体制作树立一个新的标准,应用高质量切换、过滤器、片头字幕滚动和文本动画;创建复杂的合成,关键帧轨迹运动和动态全景/局部裁剪,具有不受限制的音轨和非常卓越的灵活性。利用高效计算机和大的内存,Vegas4.0从时间线提供特技和切换的实时预览,而不必渲染。使用3轮原色和合成色校正滤波器完成先进的颜色校正和场景匹配。使用新的视频示波器精确观看图像信号电平,包括波形、矢量显示、视频RGB值(RGB Parade)和频率曲线监视器。
Vegas4.0也在音频灵活性中提供终极的功能,包括不受限制的轨迹、对24 bit/96 kHz声音支持、记录输入信号监视、特技自动控制、时间压缩/扩展等等。Vegas4.0具有超过30个摄影室品质的实时DirectX特技,包括EQ、混响、噪声门限、时间压缩/扩展和延迟。Vegas4.0充分结合特效、合成、滤波器、剪裁和动态控制等多项工具,提供数字视频流媒体,成为DV视频编辑、多媒体制作和广播等较好的解决方案。

Final Cut Pro 4
这个视频剪辑软件由Premiere创始人Randy Ubillos设计,充分利用了 PowerPC G4 处理器中的“极速引擎”(Velocity Engine)处理核心,提供全新功能,例如不需要加装 PCI卡,就可以实时预览过渡与视频特技编辑、合成和特技,Matrox最近宣布将给Final Cut Pro增加实时特性的硬件加速。该软件的界面设计相当友好,按钮位置得当,具有漂亮的3D感觉,拥有标准的项目窗口及大小可变的双监视器窗口,它运用Avid系统中含有的三点编辑功能,在preferences菜单中进行所有的DV预置之后,采集视频相当爽,用软件控制摄像机,可批量采集。时间线简洁容易浏览,程序的设计者选择邻接的编辑方式,剪辑是首尾相连放置的,切换(例如淡入淡出或划变)是通过在编辑点上双击指定的,并使用控制句柄来控制效果的长度以及入和出。特技调色板具有很多切换,虽然大部分是时髦的飞行运动、卷页模式,然而,这些切换是可自定义的,它使Final Cut Pro优于只有提供少许平凡运行特技的其他的套装软件。
在Final Cut Pro中有许多项目都可以通过具体的参数来设定,这样就可以达到非常精细的调整。Final Cut Pro支持DV标准和所有的QuickTime格式,凡是QuickTime支持的媒体格式在Final Cut Pro都可以使用,这样就可以充分利用以前制作的各种格式的视频文件,还包括数不胜数的Flash动画文件。
总之,这是一个非常好的软件包,它提供较佳的编辑功能,具有像Adobe After Effects高端合成程序包中的合成特性。

Adobe Premiere 6.5
Adobe Premiere 6.5软件用于Mac和PC平台,通过对数字视频编辑处理的改进(从采集视频到编辑,直到最终的项目输出),已经设计成专业人员使用的产品。它提供内置的跨平台支持以利于DV设备的大范围的选择,增强的用户界面,新的专业编辑工具和与其他的Adobe应用软件(包括After Effects,Photoshop和GoLive)无缝的结合。目前,Premiere已经成为桌面制作人员的数字非线性编辑软件中的标准。Adobe一直保证Premiere将与变革技术的要求同步发展,随着Premiere 6.5的开发使用,Adobe已经达到这些要求,虽然大部分界面仍然原封不动,但是拥有一些可喜的变化,当打开程序时,要求用户在A/B风格编辑时间线之间选择,或选择单声道界面以利于使用。时间线的左下角也包含快速访问新的、频繁使用时间线特性的按钮,例如Track Options对话框,Toggle Snap to Edges,Toggle Edge Viewing,Toggle Shift Tracks选项和Toggle Sync模式,还可以使用窗口底部的Track Options对话框按钮打开Track Options对话框,快速添加一个或多个视频或音频轨迹。Adobe Premiere 6.5中新的工具包括专业级的音频混合器和Automate to Timeline,它们可同时从故事板或项目窗口传送剪辑序列到时间线。Adobe Premiere 6.5也具有数目众多的界面优化和自定义特性,在整个制作阶段,很容易使用Adobe Premiere的功能强大的编辑工具。
Premiere 6.5中最大的变化就是对实时软件效果的支持。现在,在Premiere中所做的一切都可以实时预览,包括字幕、色调甚至第三方效果。
Adobe意识到与苹果的数字视频功能集成是Premiere成功的关键,所以Premiere 6.5既集成iDVD,又集成DVD Studio Pro,前者是苹果的消费级DVD创作软件,后者是苹果的专业级DVD主打解决方案,可以把内容存成DV(数字视频)格式,以便在iDVD中使用,而装了DVD Studio Pro,就可以直接从Premiere的时间线以MPEG-2格式创建DVD了。时间线标记数据是可以导出的,因此也可以在DVD Studio Pro中使用章节点和单帧数据。

in:sync Speed Razor 2000
Speed Razor是Windows完全多线程非线性视频编辑和合成软件,提供全屏幕D1未压缩的品质视频、完全场渲染的NTSC或PAL。它具有不受限制的音视频层,以及DAT品质输出的高达20音频层的实时声音混合。它同差不多所有的编辑硬件一道工作,提供实时双流媒体或单流媒体配置。现在,Speed Razor有两个新的版本:Speed Razor 2000和Speed Razor 2000 X。这两个版本都增加了新的特性,例如可预设快捷键、多重二进制和导出QuickTime格式文件的功能。Speed Razor具有专业的实时视频编辑、实时音频混合和实时视频特技合成的能力。Speed Razor的主要特性包括:精确到帧的批量采集和打印到磁带、大量的快捷键、单步调整方法、不受层限制的合成、高达20个音轨的实时多通道音频混合、CD或DAT品质立体声输出和使作品发送到网站上。Speed Razor使用众多的视频采集硬件,包括Pinnacle系统Targa和DC30系列,Matrox DigiSuite,DigiSuite LE和DTV,FAST DV Master Pro,DPS Perception和Newtek Video Toaster。
除了DigiSuite先进的实时功能外,它多样的切换矩阵和灵活的过渡特技发生器都令它成为 Speed Razor 自由形式分层编辑和合成的理想的硬件平台。超高速多层合成,加上复杂的特技及移动遮挡和加速的图形转换,使其效率更高。

Ulead Media Studio Pro 6.5
它包括一个编辑程序包,它的文本和视频着色功能方面具有特别的处理强度。Media Studio Pro提供基于PC的纯MPEG-2和DV支持,它允许从录像机、电视、光盘或摄录一体机采集以及观看原始视频。使用Ligos公司的GoMotion技术,支持IEEE 1394和MPEG- 2的DV,确保高品质视频,并大大提高了生产效率。MSP的视频编辑器集合了所有的视频成分——视频、声音、动画和字幕,并改进了这些成分,增加了特技和切换,可以将视频保存为一个文件,把放它在因特网、CD-ROM或录制到录像磁带上。另一个包括MSP的最佳的小程序是视频着色,这一可动画的视频着色程序允许直接在视频序列中的任何帧上着色。对MSP的文本部分特别注意,名为CG Infinity,这个十分完整的基于矢量的图形制作程序生成令人佩服的动画字幕和活动图像。
Media Studio Pro 6.5增加了一些高级功能,包括DV场景检测、MPEG-2编辑甚至还有DVD光盘制作(这些功能大多都是Ulead的消费类产品中首先推出的),它还提供了直接捕捉MPEG-1和MPEG-2的功能,以及Vectorscope和Waveform监视器以校正色彩。

United Media On-line Express
On-Line Express 专为DigiSuite 平台设计的。On-Line Express 支持所有 DigiSuite 实时功能,包括可调关键帧的慢动作控制、复杂的背景制作、四声道输入和输出、多层合成和加速输出到磁带。On-Line Express 用户还可使用遥控搜索钮?Discreet Edit�*
拥有非线性编辑系统需要的全部编辑能力:快速剪接、滑动、拖动、替换、插入和覆盖,同时为长短不同的项目提供极好的媒体处理能力。在多处理、Windows 2000多线程环境中,使用Edit非线性编辑系统,将拥有从第一次剪接到在线全过程所需要的速度。Edit桌面系统提供实时关键帧动画的全部图形和特效能力,实时访问Combustion,它是著名的跟踪、图像稳定、绘画和颜色调整工具软件。这个Windows软件程序包根据使用的硬件不同有5个不同的特色,最好是使用Matrox DigiSuite LE和Matrox DigiSuite采集卡的选项1和选项2。现在的版本6.5增加了更多的合成特性,与DV兼容,可与Discreet公司的其他产品更好地配合使用。它是编辑未压缩的视频的最佳解决方案,编辑是实时的,非线性编辑解决方案在该桌面上完成合成、抠像和直观的特技。Edit完善的多层时间轴的垂直编辑完全使用Alpha通道,编辑复杂的关键帧,48条实时音轨混编使Edit成为广播电视、多媒体项目完美的非线性应用系统。快速时间轴编辑,先进的特效和音频;与Combustion结合, 全部这些都支持广播质量的非压缩图像。Jobnet,一个功能强大的对编辑功能的扩展,在Edit工作站之间共享项目、工作组、时间线、媒介、图形以及独立的片段数据。

AIST MoviePack
MoviePack是一个用于PC的全功能的视频编辑、合成和图像动画软件工具,具有3D特技和超速渲染的先进的核心技术。核心技术QPM和AMT形成AIST的“直接实时预览”或LPR的基础,它不落后于用户的动作,并显示所有的变化,包括切换、特技、变形、颜色校正和字幕。这个软件包是围绕开放式体系结构构建的,它允许用户扩展它,这意味着当要求改变时不必去寻找另外的新程序。作为一个开放的插件主体,MoviePack也给予自定义访问第三方厂家的插件。MoviePack大的改革是AIST称为Intelli渲染的内容,使渲染的视频和剪辑能够从时间线直接播放,只有被修改的帧被重新渲染,不再需要重新渲染整个剪辑。

Incite Studio 2.6
它是一个Windows软件包,设计在Matrox DigiSuite,DigiSuite LE和DigiSuite DTV硬件上运行。Incite提供一个易用编辑界面、多层的编辑方式,包含许多实用程序以及许多具有无限关键帧的实时特技。它是使用模拟磁带机器的最佳的系统,使用这些机器在同样的时间线上处理基于硬盘的所有剪辑。Incite 是第一款具有“混合”(将基于磁盘、磁带和现场的信号混合)编辑功能的基于 DigiSuite 的软件,还有配音录音和同时视频播放和录制。它充分利用 DigiSuite 平台的实时性能,复杂的合成可使用多层合成引擎完成,Incite 用户还可使用遥控搜索钮疡市场上最好的混合数字视频编辑器的荣誉。

Avid Xpress 4
该软件拥有编辑层的独特的方法,视频是无损的。它是可以在桌面工作站或笔记本上使用的唯一的一个软件产品,用户界面非常像Avid Media Composer。新的版本Xpress 4使用Terran Interactive(包含Media Cleaner EZ),增加了可以在任何地方提供媒体的功能,包括一套功能强大的视频编辑、特技、音频、字幕、图像、合成和协同工作的工具。

这里有
http://www.9wenjjt.com/media/Video/Nonlinear/2007-03-28/media_6250.html

推箱子小游戏
.386
.model flat,stdcall
option casemap:none

include CBox.inc
include StoreHouse.inc

.const
MAP_TOP equ 32
MAP_LEFT equ 1

.data

xBmBack dd 0
xBmWall dd 30
xBmRoad dd 60
xBmBox1 dd 90
xBmBox2 dd 120
xBmObject dd 150
xBmMan dd 180

szCaption db 'RedBox',0
szLoadError db 'Load Resource Error! ',0
szAlreadyMaxGate db 'Already Max Gate!',0
szOutOfRange db 'Out of Range!',0
szSuccessMsg db 'Your are success!!!',13,10,'Are you want to next gate?',0

FmtStr db 'val = %d',0
FmtGate db ' - No.%d',0
.data?
bmToolbar dd ?
BackDc dd ?
hBitMap dd ?

szErrorMessage db 256 dup (?)

Map db 14D*12D dup (?) ; 14 x 12 Grid
ManXPos dd ?
ManYPos dd ?
CurrGate dd ?
CurrStep dd ?

.code

start:

invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke InitCommonControls
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX
LOCAL msg:MSG

mov wc.cbSize,SIZEOF WNDCLASSEX
mov wc.style,CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc,OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,DLGWINDOWEXTRA
push hInst
pop wc.hInstance
mov wc.hbrBackground,COLOR_BTNFACE+1
mov wc.lpszMenuName,OFFSET MenuName
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx,addr wc
invoke CreateDialogParam,hInstance,addr DlgName,NULL,addr WndProc,NULL
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
.while TRUE
invoke GetMessage,addr msg,NULL,0,0
.BREAK .if !eax
invoke TranslateMessage,addr msg
invoke DispatchMessage,addr msg
.endw
mov eax,msg.wParam
ret

WinMain endp

WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL ps :PAINTSTRUCT
LOCAL Dc:HDC

mov eax,uMsg
.if eax == WM_KEYDOWN
invoke KeyDownProc,wParam
.elseif eax==WM_INITDIALOG
push hWin
pop hWnd
invoke GetDlgItem,hWin,IDC_TBRMAIN
invoke DoToolBar,hInstance,eax
invoke LoadRes
.if eax == FALSE
invoke MessageBox,hWin,Addr szErrorMessage,\
Addr szLoadError,MB_ICONERROR
.endif
invoke InitStBar
invoke SelectGate,1
.elseif eax==WM_COMMAND
mov eax,wParam
and eax,0FFFFh
.if eax==IDM_FILE_EXIT
invoke SendMessage,hWin,WM_CLOSE,0,0
.elseif eax==IDM_HELP_ABOUT
invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL
.elseif eax == IDC_TBB_NEW
invoke SelectGate,CurrGate
.elseif eax == IDC_TBB_PREV
mov eax, CurrGate
dec eax
invoke SelectGate,eax
.elseif eax == IDC_TBB_NEXT
invoke NextGate
.elseif eax == IDC_TBB_ABOUT
invoke ShellAbout,hWnd,Addr AppName,Addr AboutMsg,NULL
.endif
.elseif eax==WM_PAINT
invoke BeginPaint,hWin,Addr ps
mov Dc,eax
invoke WMPaint,Dc
invoke EndPaint,hWin,Addr ps
.elseif eax==WM_CLOSE
invoke DestroyWindow,hWin
.elseif uMsg==WM_DESTROY
invoke FreeRes
invoke PostQuitMessage,NULL
.else
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret

WndProc endp

DoToolBar proc hInst:DWORD,hToolBar:HWND
LOCAL tbab:TBADDBITMAP

;Set toolbar struct size
invoke SendMessage,hToolBar,TB_BUTTONSTRUCTSIZE,sizeof TBBUTTON,0
;Set toolbar bitmap
;push HINST_COMMCTRL
invoke LoadBitmap,hInstance,BM_TOOLBAR
mov bmToolbar,eax
;push eax
;pop tbab.hInst
;mov tbab.nID,IDB_VIEW_LARGE_COLOR ;IDB_STD_SMALL_COLOR
mov tbab.hInst,NULL
mov tbab.nID ,eax
invoke SendMessage,hToolBar,TB_ADDBITMAP,15,addr tbab
;Set toolbar buttons
invoke SendMessage,hToolBar,TB_ADDBUTTONS,ntbrbtns,addr tbrbtns
mov eax,hToolBar
ret

DoToolBar endp

;-- Load Bitmap from Resource and return true or false ---
LoadRes proc
LOCAL Dc:DWORD

invoke lstrcpy,Addr szErrorMessage,Addr szLoadError
invoke GetDC,hWnd
mov Dc,eax
invoke CreateCompatibleDC,Dc
mov BackDc,eax

invoke LoadBitmap,hInstance,BM_MAIN
.if eax == 0
mov eax ,FALSE
jmp @@ExitLoad
.endif
mov hBitMap,eax
invoke SelectObject,BackDc,hBitMap
mov eax ,TRUE
@@ExitLoad:

ret

LoadRes endp

;-- Free all Resource ---
FreeRes proc
invoke DeleteObject,hBitMap
invoke DeleteDC,BackDc
invoke DeleteObject,bmToolbar
ret
FreeRes endp

NextGate proc

mov eax ,CurrGate
.if eax < MAX_GATES
inc CurrGate
invoke SelectGate,CurrGate
.else
invoke MessageBox,hWnd,Addr szAlreadyMaxGate,Addr szCaption,MB_ICONINFORMATION
.endif
ret

NextGate endp

;--- Select game Gate
SelectGate proc iGate :DWORD
LOCAL szTmp1[256]:BYTE
LOCAL szTmp2[256]:BYTE

mov eax ,iGate
.if eax >MAX_GATES || eax < 1
invoke MessageBox,hWnd,Addr szOutOfRange,Addr szCaption,MB_ICONERROR
ret
.endif
mov CurrGate ,eax
mov eax ,14D*12D
mov ebx,iGate
dec ebx
mul bx

push esi
lea esi,BoxMaps
add esi,eax
lea edi,Map
mov ecx,14D*12D
rep movsb

mov CurrStep , 0
mov ecx ,0
lea esi,Map
@@1: ;-- found Man Pos
mov ebx,ecx
mov al, byte ptr [esi][ebx]
cmp al,MAP_MAN
jz @@2
inc ecx
cmp ecx,14D*12D
jnz @@1
@@2:
mov al ,MAP_ROAD
mov byte ptr [esi][ebx],al

; Pos to x,y
mov edx ,0
mov eax,ecx
mov ebx,14D
div ebx
mov ManXPos,edx
mov ManYPos,eax
pop esi
invoke Repaint
invoke wsprintf,Addr szTmp1,Addr FmtGate,CurrGate
invoke lstrcpy,Addr szTmp2,Addr szCaption
invoke lstrcat,Addr szTmp2,Addr szTmp1
invoke SendMessage,hWnd,WM_SETTEXT,0,Addr szTmp2
ret

SelectGate endp

WMPaint proc Dc:DWORD
LOCAL i:DWORD
LOCAL j:DWORD
LOCAL x:DWORD
LOCAL y:DWORD
LOCAL nPos :DWORD

mov x ,MAP_LEFT
mov y ,MAP_TOP
mov i ,1
mov j ,1
lea esi ,Map
@@i:
mov x ,MAP_LEFT
mov j ,1
@@j:
;Calc nPos ,nPos := (i-1) * 14 + (j-1)
mov eax,i
dec eax
mov ebx,14D
mul bx
add eax,j
dec eax
mov ebx,eax
mov al,[esi][ebx]
.if al == MAP_BACK
invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmBack,0,SRCCOPY
.elseif al == MAP_WALL
invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmWall,0,SRCCOPY
.elseif al == MAP_ROAD
invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmRoad,0,SRCCOPY
.elseif al == MAP_BOX1
invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmBox1,0,SRCCOPY
.elseif al == MAP_BOX2
invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmBox2,0,SRCCOPY
.elseif al == MAP_OBJECT
invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmObject,0,SRCCOPY
.else ; eax == MAP_MAN
invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmMan,0,SRCCOPY
.endif

add x,30D
inc j
cmp j ,15D
jb @@j ; if j <= 14

inc i
add y,30D
cmp i,13 ;if i <= 12
jb @@i

mov edx,0
mov eax,ManXPos
mov ebx,30D
mul bx
add eax,MAP_LEFT
mov x,eax

mov edx ,0
mov eax,ManYPos
mov ebx,30D
mul bx
add eax,MAP_TOP
mov y,eax

invoke BitBlt,Dc,x,y,30D,30D,BackDc,xBmMan,0,SRCCOPY

ret
WMPaint endp

KeyDownProc proc wParam:DWORD
mov eax ,wParam
.if eax == VK_UP
invoke ManMove,VK_UP
.elseif eax == VK_DOWN
invoke ManMove,VK_DOWN
.elseif eax == VK_LEFT
invoke ManMove,VK_LEFT
.elseif eax == VK_RIGHT
invoke ManMove ,VK_RIGHT
.else
ret
.endif

invoke Check
.if eax == TRUE
invoke MessageBox,hWnd,Addr szSuccessMsg,Addr szCaption,MB_ICONINFORMATION or MB_OKCANCEL
.if eax == IDOK
invoke NextGate
.endif
.endif
ret

KeyDownProc endp

ManMove proc vKey :DWORD
LOCAL NewX:DWORD
LOCAL NewY:DWORD
LOCAL NewX2 :DWORD
LOCAL NewY2 :DWORD
LOCAL M1 :byte
LOCAL M2 :byte
LOCAL nPos1 :DWORD
LOCAL nPos2 :DWORD

push esi

mov eax,ManXPos
mov NewX,eax
mov NewX2,eax
mov eax,ManYPos
mov NewY,eax
mov NewY2,eax

mov eax ,vKey
.if eax == VK_UP
dec NewY
dec NewY2
dec NewY2
.elseif eax == VK_DOWN
inc NewY
inc NewY2
inc NewY2
.elseif eax == VK_LEFT
dec NewX
dec NewX2
dec NewX2
.elseif eax == VK_RIGHT
inc NewX
inc NewX2
inc NewX2
.else
ret
.endif

mov esi ,offset Map
; Pos = y*14 + x
; Get M1
mov eax,NewY
mov ebx,14D
mul bx
add eax,NewX
mov ebx,eax
mov nPos1,eax
mov al ,[esi][ebx]
mov M1,al
; Get M2
mov eax,NewY2
mov ebx,14D
mul bx
add eax,NewX2
mov ebx,eax
mov nPos2,eax
mov al ,[esi][ebx]
mov M2,al

mov al,M1
.if (al == MAP_ROAD || al == MAP_OBJECT )
push NewX
pop ManXPos
push NewY
pop ManYPos
.elseif al == MAP_BOX1 ; push box
mov al ,M2
.if al == MAP_ROAD ; push ok
mov ebx,nPos2
mov al,MAP_BOX1
mov [esi][ebx],al
mov ebx,nPos1
mov al,MAP_ROAD
mov [esi][ebx],al
push NewX
pop ManXPos
push NewY
pop ManYPos
.elseif al == MAP_OBJECT
mov ebx,nPos2
mov al,MAP_BOX2
mov [esi][ebx],al
mov ebx,nPos1
mov al,MAP_ROAD
mov [esi][ebx],al
push NewX
pop ManXPos
push NewY
pop ManYPos
.endif
.elseif al == MAP_BOX2
mov al,M2
.if al == MAP_ROAD
mov ebx,nPos2
mov al,MAP_BOX1
mov [esi][ebx],al
mov ebx,nPos1
mov al,MAP_OBJECT
mov [esi][ebx],al
push NewX
pop ManXPos
push NewY
pop ManYPos
.elseif al == MAP_OBJECT
mov ebx,nPos2
mov al,MAP_BOX2
mov [esi][ebx],al
mov ebx,nPos1
mov al,MAP_OBJECT
mov [esi][ebx],al
push NewX
pop ManXPos
push NewY
pop ManYPos
.endif
.else

.endif

invoke Repaint
pop esi
ret

ManMove endp

XYtoPos proc x:DWORD,y:DWORD
; pos = y *14 + x Zero-Based
mov eax, y
mov ebx, 14D
mul bx
add eax ,x
ret
XYtoPos endp

Repaint proc
LOCAL R:RECT

invoke GetClientRect,hWnd,Addr R
invoke InvalidateRect,hWnd,Addr R,0
ret

Repaint endp

Check proc
; Check Success and return true or false
LOCAL Result :DWORD
push esi
push TRUE
pop Result
lea esi,Map
mov ecx, 14D*12D
mov ebx ,0
@@1:
mov al ,[esi][ebx]
inc ebx
cmp al,MAP_OBJECT
jz @@2
dec ecx
jnz @@1
jmp @@ExitCheck
@@2:
push FALSE
pop Result
@@ExitCheck:
mov eax,Result
pop esi
ret

Check endp

InitStBar proc
LOCAL StbarHandle :DWORD
invoke GetDlgItem,hWnd,IDC_SBR1
mov StbarHandle,eax
invoke SendMessage,StbarHandle,SB_SIMPLE,1,0
;invoke SendMessage,StbarHandle,SB_SETPARTS,1,150
ret

InitStBar endp

ShowMessage proc Val:DWORD
push eax
invoke wsprintf,Addr szErrorMessage,Addr FmtStr,Val
invoke MessageBox,hWnd,Addr szErrorMessage,Addr szCaption,MB_ICONINFORMATION
pop eax
ret

ShowMessage endp

end start


谁能帮我逐行解释一下这个汇编小程序么,特别是jz以下那段,怎么运行的...
这是在数你上表格“DATABUF”中那七组二位十六进制数中的高位是否为1的个数,碰到全0结束。数到的个数在CX中带出。

如何用汇编语言写出一段可以实现点兵点将的小程序?
通过这个基于FX5U小程序,可以看出,当 始终闭合X0,M101会不断切换通断,即ALT会使位元件反复取反,使得输出Y0、Y1不断变化,直到X0断开,点兵点将到Y0还是Y1就是谁输出,不可控;而FF仅取反一次输出。点动X0闭合断开一次,速度快过指令执行周期的话,ALT和FF效果一致,仅取反一次输出。因此,如果...

求几个汇编小程序的源代码 要完整的
简单的取系统时间小程序code segment assume cs:code start:mov ah,2ch ;2ch号功能调用,取系统时间:ch,cl,dh中分别存放时分秒 int 21h calldisptime;调用disptime子程序显示时间 exit:mov  ax,4c00h ;结束程序,返回DOS int 21h disptime proc mov al,ch  ;小时的值赋给al cbw ;al...

汇编小程序有点不太明白?急
st1 db 'AB'st2 db 16dup(?)cnt equ $-str1 mov cx,cnt 是当前地址的意思,$-ST1就是st1和st2定义的变量所占空间大小,st1 为2+st2为16=18转为十进制就是12H

汇编新手请教,汇编小程序出错
11,12,18,19这4行的错误均是数据类型的问题,你将A和B均定义为双字(32位),而AX和DX均是一个字长(16位)。另外,第2行的.STACK 10000H为溢出错误,可将10000H改为1000H试试。

初学汇编小程序
这是一个bcd码转ASCII的.--- BCD码,本身就是十进制数,不用转换,也无法转换;这是一个BCD码转ASCII的程序。

MIPS 汇编 写的一个小程序
t2 = ffffffff(16), 算术右移3位,由于需要在左侧补1,所以与原来的数相同,仍为ffffffff(16) = -1 你可以把你的程序放在QtSpim中运行一下, 就可以得到相应结果了。更具体的MIPS指令以及有、无符号数的运算可以参考《计算机组成与设计 硬件\/软件接口》,David A. Patterson, John L. Hennessy ...

求一个汇编小程序
include <iostream.h> include <iomanip.h> include <string.h> include <fstream.h> const int Maxr=100; \/\/读者上限 const int Maxb=100; \/\/图书上限 const int Maxbor=5; \/\/每个读者最多借借5本 class Reader \/\/读者类 { int tag; \/\/删除标记 1:已删,0:未删 int no;...

谁能给一个8086汇编小程序,电子时钟,能够显示日期和时间,急用,高手帮 ...
data segment db "00\/00\/00 00:00:00",'$'data ends codesg segment assume cs:codesg,ds:data start:mov ax,data mov ds,ax mov cx,6 mov bx,0 mov ah,0 mov al,9 s:push cx push ax out 70h,al in al,71h mov ah,al mov cl,4 shr ah,cl and al,00001111b add ah,30h...

关于汇编的一个小程序的问题,我是初学者
21h loop xx ; --- Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序 mov ah,1 int 21h mov ah,4ch ;结束程序 int 21h Buffer db 100 Code ENDS END Start ;编译到此结束

夏河县18930255440: 求助!!汇编小程序:显示变色二进制数字编写程序,实现下述功能:
爨残宜欣: 用系统功能调用INT 21H的0A号功能,键入任意位数(小于等于8位)的二进制数.此二进制数存放在数据区的某单元中

夏河县18930255440: 汇编求助,从键盘输入两位十六进制数,在显示器上显示出二进制,在线等 -
爨残宜欣: ;================================================ ASSUME CS:CODE, DS:DATA DATA SEGMENT MSG2 DB ', The BIN of this number is ' MSG3 DB ?, ?, ?, ?, 'B.', 13, 10MSG1 DB 'Please input a number(0~F): $' MSG4 DB '. Input ...

夏河县18930255440: 汇编语言中,在屏幕上显示二进制的,有一段程序是MOV DL,'0' ROL BL,1 JNC N -
爨残宜欣: JNC是判断标志寄存器中状态位C,若C=0则跳转.状态寄存器中的位是根据上步操作的结果自动更新的.

夏河县18930255440: 汇编语言:编写一个程序把一个64位二进制数用十六进制形式在屏幕上显示
爨残宜欣: disp proc near ;显示16进制数(字母大写)子程序,入口:BX寄存器存有二进制待显示数 mov dl,bh mov cl,4 shr dl,cl cmp dl,10 jc hex1 add dl,30h hex1: add dl,37h mov ah,02h int 21h mov dl,bh and dl,0fh cmp dl,10 jc hex2 add dl,30h hex2: add dl...

夏河县18930255440: 用汇编程序语言,把键盘输入的十六进制数用二进制数的形式显示出来 -
爨残宜欣: data segment x db 34h ;00110100b ;34h在内存中的存储格式为00110100b data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov bl,byte ptr [x] ;al

夏河县18930255440: 用汇编语言编写一个程序,把存放在BX寄存器内的值(二进制数)用十六位二进制数的形式在屏幕上显示出来 -
爨残宜欣: assume cs:code code segment start:mov bx,1234h;number to showmov cx,16;loop timepush bx s:mov dx,bxand dx,8000hcmp dx,0je put0mov ah,02hmov dl,31hint 21h;show '1'jmp onebit put0:mov ah,02hmov dl,30hint 21h;show '0' ...

夏河县18930255440: 汇编程序,以二进制形式显示bl中的内容.如:若bl=56h,则最终屏幕显示"01010110" -
爨残宜欣: 参考:http://zhidao.baidu.com/question/424020382536876812.htmlhttp://wenwen.sogou.com/z/q895558147.htm

夏河县18930255440: 编写汇编程序,利用led灯亮暗表示按键按下次数,按一次加一,用二进制 -
爨残宜欣: LED EQU P0 KEY EQU P1.0 ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV LED,#0 CLR A LOOP: JB KEY,$ JNB KEY,$ INC A MOV LED,A SJMP LOOP END

夏河县18930255440: 汇编小问题 一个程序要求编制一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来 -
爨残宜欣: 这个方式,是在DOS 2.0之前,还没有出现4CH号功能调用之前所用的方式.那时候,退出DOS程序,用的是 INT 20H 号中断.但这个中断能正确执行的前提,是CS必须是程序加载时的PSP前缀的段地址.这对.com格式的程序,没有问题.它...

夏河县18930255440: 汇编语言,16进制转换2进制显示问题,急急急急啊
爨残宜欣: ...在mov SI,OFFSET BUF 前面加上 MOV AX,DATA MOV DS,AX 不加这两句的话,程序找不到数据段,自然也就无法找到BUF变量的数值,也就无法输出BUF里面的东西 好吧,还有一个就是界限错了...给分啊

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网