用电脑的汇编语言(8086)编写移动的小车!
使用计算机汇编语言(8086)编写移动小车的程序! 数据段CARDB7;字符图形表DB52H,10,0,0DB0B1H,10,0,1DB0DBH,10,0,1DB0DBH,10,0,1DB4FH,7,1,0DB4FH,7,0,-3DB2,7,-2, 1CHAR_CNTDW?P OINTERDW?LINE_ONDB?COL_ONDB?DATAENDSstacksegmentstackdb100dup(?)stackendsCODESEGMENT'code'ASSUMECS:CODE,DS:DATAMAINPROC FARPUSHDSSUBAX,AXPUSHAXMOVAX,DATA;初始化DSMOVDS,AXMOVAH,0;设置300×200彩色图形模式MOVAL,4INT10HMOVAH,0BH;设置背景颜色 MOVBH,0MOVBL,2INT10H MOVAH,0BH;设置调色板MOVBH,01MOVBL,00INT10H;CALLCLEAR_SCREEN;清屏LEADI,CAR;DI指向字符图形表MOVDH,1;从第5行第5列开始 MOVDL,1;显示汽车 he_CALLMOVE HAPEjmpheRETMAINENDP;CLEAR_SCREENPROCNEARPUSHAX ;注册 PUSHBXPUSHXPUSHDX;MOVAH,6;屏幕滚动功能;MOVAL,0;MOVCH,0;左上角行号;MOVCL,0;左上角列号;MOVDH,24;右下角行号;MOVDL,79 ;右下角列号;MOVBH,7;涉及行属性;INT10H;调用显示属性POPDX;恢复 注册POPCXPOPBXPOPAXRET;返回主程序 CLEAR_SCREENENDP;MOVE_SHAP EPROCNEARPUSHAX; 寄存器 PushBXPUSHDXPUSHDIMOVAH, 0FH 获取当前显示模式 INT10HSUBCH, 清除计数器 CX 高字节 MOVCL, [DI]; MOVCHAR_CNT、CX中第一个字符存放循环数 MOVPOINTER、DIMOVLINE_ON、DHMOVCOL_ON、DLPLOT_NEXT:ADDH、[DI+2]; JBMOV_CRSRCALLERASEPOPDIPODXPOPCXPOPBXPOPAXRETMOV_CRSR:MOVAH,2;移动光标位置INT10HMOVAL,[DI]MOVBL,[DI+1];获取字符值和属性 PUSHCXMOVCX,1MOVAH,09;显示字符 INT10HMOVAL,4; 绘制LOOPPLOT_NEXTCALLDLY_QRTR调用延迟子程序CALLERASE; EXT:ADDDH,[DI+2]ADDDL,[DI+3]MOVAH,2INT10HMOVAL,[DI]MOVBL,0PUSHCXMOVCX,1MOVAH,9INT10HPOPCXADDDI,4LOOPERASE_NEXTMOVCX,CHAR_CNTMOVDI,POINTER;incLINE_INMOVDH,LIN_ONMOVDH E_ONINCCOL_ONMOVDL,COL_ONRETERASEENDPDLY_QRTRPROCNEAR 延迟子程序 PUSHCXPUSHDXMOVDX,5000D11:MOVCX,2801D12:LOOPD12DECDXJNZD11POPDXPOPCXRETDLYENDQRTRAINEND;8086 汇编 亮2个灯,暗6个灯,一个灯从上往中间轮流点亮,另一个灯从下往中间轮流点亮,循环间隔约1秒。
//流水灯
#include"reg52.h"
#defineLED_PORTP3void
late(unsigned int time)
{
1;halfbytel=halfby tel<<1; Delay(10);>
2开1个灯,暗7个灯,从上到下各开一个灯,一次只开一个灯,循环间隔2秒左右,开2个灯,调暗 6 盏灯, 一个灯从上到下中间灯亮,另一个灯从下到中心每隔1秒亮一次
4 实现第1到第8个ROR、ROL循环移位语句的灯循环(p77) 第1个,始终由上下循环寄存器和4个16位变址寄存器(包括堆栈指针)存放数据。
寄存器经常在指令中隐式使用,需要对临时值(或32k)进行复杂的寄存器配置,因此其中一个操作数必须是寄存器。
用8086汇编语言编程
, int16h; 没有ECO输入CMPAL,1BH; :xordx,dxdivwordptr [di],'0'电影[SI],Alincsiincdiincdimox,dxloopq4leadx,resultq3:movah,9int21hjp h,0Ah,0Ah,'inputeror!汇编语言(8086)最简单加减乘除编程;定义A,B 使C=A+B D=A-B E=A*B F=A/B 符号有DB DW
根据您的要求:“符号有DBDWDDCXSISHLSHRMOVADDSTACKDATA等” 这里的符号指定数据类型和寄存器。A+B(如果所有说明均可用)。
A-B A*B 像A/B这样的功能实现起来相对简单。
首先确定A和B的值。
例如, 使用DB指定16位数据类型; 那么可以定义为: DBAequ0001hDBBequ0002h 然后计算C=A+B; 使用ADD指令来实现加法。
行动:ADDC; B计算D=A-B; 使用SUB指令实现减法:SUBD; B是我们需要计算E=A*B的地方。
8086汇编语言没有直接乘法指令,但可以通过循环和加法来实现:MULBMOVE; AX 计算 F = A/B 并使用 DIV 指令实现除法: MOVAX、AMOVBX、BDIVBXMOVF、AL 在上面的代码示例中,A 和 B 设置为 16 位数据类型,C、 D E和F使用相应的16位数据类型。
通过这些基本运算,加法; 减法 可以完成乘法和除法计算。
数据类型和寄存器的使用在8086汇编语言中非常重要,正确使用这些资源可以优化程序性能。
应该注意的是。
此外, 例如:MOVAX; AMOVBX, 可以使用堆栈(STACK)来临时存储中间结果,例如BPUSHAXPUSHBXPOPCXPOPDX。
以上是简单的集成; 减法 它是使用8086汇编语言实现乘法和除法运算的基本方法,具有指令和数据类型的逻辑使用。
它可以完成复杂的计算任务。