汇编程序

阅读 / 问答 / 标签

汇编程序题目,求详解。

忘的差不多了

汇编程序

就是把0fh这个数字放到寄存器al中,它会冲掉原来的

什么是汇编程序,编译程序,解释程序?它们的功能是什么?

【汇编程序】:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。【编译程序】:把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言的目标程序的翻译程序。【解释程序】:对源程序边解释翻译成机器代码边执行的高级语言程序。高级语言的程序的执行的途径:1)源程序(高级语言)->【编译程序】->目标程序(汇编语言)->【汇编程序】->目标程序(机器语言)->计算结果2)源程序(高级语言)->【编译程序】->目标程序(机器语言)->计算结果3)源程序(高级语言)->【解释程序】(逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序)->计算结果

"用汇编语言编写的程序叫汇编程序"为什么是错的啊???

汇编语言源程序

把下面 简单 汇编程序 加上详细注释

program segmentmain proc farassume cs:programstart:push ds ;这三条指令是为了能正确返回操作系统 sub ax,ax push axinput:mov ah,01 ;调用中断从键盘输入一个字符,字符的ASCII码在AL中 ;mov ah,07 int 21h cmp al,"q" ;比较输入的字符是否为"q",是则跳到标号quit je quit mov dl,al mov ah,02 ;如果不是"q"则调用中断输出到屏幕 int 21h jmp input ;跳到标号input继续输入字符 quit:ret ;退出程序main endpprogram ends end start2.输出十六进制1EC8data_seg segment DATAX dw 1CE8Hdata_seg endscode_seg segment main proc far assume cs:code_seg,ds:data_seg start:push ds ;这三条指令是为了能正确返回操作系统sbb ax,axpush axmov ax,data_seg ;将数据段的段地址放入DS中 mov ds,ax mov bx,DATAX ;将变量DATAX中的数放入BX中mov ch,4 rotate:mov cl,4 ;CL中的数是为了使用移位指令,大小为移的位数rol bx,cl;将BX中的数循环左移4位,即相当于把BX中高4位放在了低4位,移后 ;的结果相当于CE81H(第一次)mov al,bl;此时AL中为81H(第一次)and al,0fh;将AL中的高4位清零即变成01H(第一次)add al,30h;将AL加上30H得到数字的ASCII码cmp al,3ah;比较AL中是否是数字,不是说明是字母A...Fjl print_it;是则跳到print_it直接输出add al,7h;将AL再加7得到相应字母的ASCII码print_it:mov dl,al ;将数字输出到屏幕mov ah,02hint 21hdec ch;循环次数减1jnz rotate;若循环没结束则跳到totate继续执行mov ah,07;等待输入,程序暂停int 21hret ;程序结束main endpcode_seg endsend start3.求1加2的和data_seg segmenta db ?b db ?data_seg endscode_seg segmentmain proc farassume cs:code_seg,ds:data_segstart:push ds ;作用同以上程序 sub ax,ax push axmov ax,data_segmov ds,axmov a,1 ;分别将变量a,b赋值1,2mov b,2 mov al,a;将a的值放入AL中add al,b;将AL中的值 与b相加,结果放在AL中mov dl,al;相加结果放入DL中以便用中断输出add dl,30h;得到数字的ASCII码;or dl,30hmov ah,2int 21h;输出到屏幕mov ah,07;程序暂停,等待按键,然后结束int 21hretmain endpcode_seg endsend start

什么是汇编程序?什么是汇编语言

百度百科里面查汇编语言。

求解释一个汇编程序

你这样肯定没人给你看代码啊。。。汇编主要就是ADDCMP跳转等这些语句重要,其他的一般不会用的。建议你看这本书《微型计算机原理与接口技术 第四版》 周和琴 吴秀清 编

汇编程序。。

U0001f44d

汇编程序的结构与实现

由于汇编语言的指令与机器语言的指令大体上保持一一对应的关系,汇编算法采用的基本策略是简单的。通常采用两遍扫描源程序的算法。第一遍扫描源程序根据符号的定义和使用,收集符号的有关信息到符号表中;第二遍利用第一遍收集的符号信息,将源程序中的符号化指令逐条翻译为相应的机器指令。具体的翻译工作可归纳为如下几项:用机器操作码代替符号操作;用数值地址代替符号地址;将常数翻译为机器的内部表示;分配指令和数据所需的存储单元。除了上述的翻译工作外,汇编程序还要考虑:处理伪指令,收集程序中提供的汇编指示信息,并执行相应的功能。为用户提供信息和源程序清单。汇编的善后处理工作,随目标语言的类型不同而有所不同。有的直接启动执行,有的先进行连接装配。如果具有条件汇编、宏汇编或高级汇编功能时,也应进行相应的翻译处理。 假定汇编语言中规定符号的应用一定出现在定义之后,则两遍算法可容易地合并成一遍算法加以实现。

一般用什么软件来写汇编程序?

hk80c51

用汇编程序用定时器和中断,编写程序

主程序:push ds ;保存数据段 mov ax,0000 mov ds,ax ;数据段清零 mov ax,offset irq7 ;取中断程序入口地址 add ax,2000 ;加装时IP=2000地址 mov si,003c ;填8259中断7中断矢量 mov w[si],ax ;填偏移量矢量 mov ax,0000 ;段地址CS=0000H mov si,003e mov w[si],ax ;填段地址矢量 pop ds ;弹栈 in al,21 ;读8259中断屏蔽字 and al,7f ;开8259中断7 out 21,al mov al,b4 ;8253的计数器2为方式2,采用二进制计数,先低后高写入计数值 10110100 out 43,al ;写入方式控制字 mov ax,2e9c 0010 1110 1001 1100B 11932D out 42,al ;写入低字节计数值 1001 1100 mov al,ah out 42,al ;写入高字节计数值 0010 1110mov al,81 ;8255的A口为方式0输出,B口为方式0输出,C口下部输入 1000 0001out 63,al ;写方式控制字call first ;调用first子程序,赋计数初值begi:hlt 延时等待sti ;开中断mov ah,01int 16 ;检测是否按了键盘jz begimov ah,00 ;读键值int 16cmp al,0d ;是否按了回车jnz A1 mov si,4000 not [si+04] ;偏移地址为4004的内存单元内容取反jmp begiA1:cmp al,1b ;是否按了ESC键jnz A2call first ;重新赋初值,相当于清零A2:jmp begi中断程序:irq7:call disp ;调用disp子程序,用来在数码管显示数据 mov si,4000 cmp [si+04],00 ;判断是否按了第2次回车键 je A4 call addn ;调用addn子程序,用来计数A4:mov al,20 out 20,al cli ;关中断 iret ;返回addn程序:addn:mov si,4000add [si+03],01 ;百分之一秒加1cmp [si+03],0a ;判断是否大于10jz A5jmp A9A5:mov [si+03],00Add [si+02],01 ;十分之一秒加1cmp [si+02],0a ;判断是否大于10jz A6jmp A9A6:mov [si+02],00add [si+01],01 ;秒位加1cmp [si+01],0a ;判断是否大于10 jz A7jmp A9A7:mov [si+01],00add [si],01 ;十秒位加1cmp [si],06 ;判断是否大于6jz A8jmp A9A8:mov [si],00 ;大于60:00重新开始A9: ret赋初值程序:first:mov si,4000 mov al,00 mov [si],almov [si+01],almov [si+02],almov [si+03],almov [si+04],alret显示程序:disp:push ax ;保存AX mov si,4000 ;指向数据缓冲区 mov dl,f7 ;1111 0111 指向数码管 mov al,dl ;al=1111 0111again:out 60,al ;写端口Amov al,[si]mov bx,4100 ;指向数码缓冲区 bx=0100 0001 0000 0000and ax,00ff ; ax=0000 0000 aladd bx,ax ;得到显示代码 bx=0100 0001 almov al,[bx]out 61,al ;写端口Bcall dally :调用延时程序dallyinc simov al,dltest al,01jz out ror al,1 ;指向下一个数码管mov dl,aljmp againout: pop ax ;弹出AXretdally:push cx ;延时程序 push axmov cx,0010t1 :mov ax,0010t2 dec axjnz t2loop t1pop axpop cxret数码缓冲区:0000:4000 3f,06,5b4f,66,6d,7d,07,7f,6f二、 设计思想电子秒表要实现的功能:用键盘中断来控制整个程序,按一下回车键启动电子秒表,再按一下暂停,按一下ESC键清零,用七段数码管显示时间。整个程序涉及到8255、8253与8259三个芯片。8253的OUT2,CLK2分别连接8259的IRQ7与PCLK,8253的GATE2连接正5伏电压,采用计数器2每隔0.01秒产生一次中断并且计数,写入以偏移地址4000H开始的4个内存单元,然后利用8255将内存单元的数据输出到七段数码管。由于键盘中断优先于8259的7号中断,所以程序只有在按一下回车键才启动电子秒表,再按一下暂停,按一下ESC键清零,如果超出了60秒,整个程序自动重新开始。三、 所用芯片工作原理8255:接口电路在CPU和I/O设备之间起着信号的变换和传输的作用。 任何接口电路与CPU之间的信息传输方式都是并行的,即CPU与接口电路之间以数据字节/字为单位传送信息。接口电路与I/O设备之间的信息传送方式,有并行和串行两种,相应的接口电路称为并行接口和串行接口。 并行接口是在多根数据线上,以数据字节/字与I/O设备交换信息。在输入过程中,输入设备把数据送给接口,并且使状态线“输入准备好”有效。接口把数据存放在“输入缓冲寄存器”中,同时使“输入回答”线有效,作为对外设的响应。外设在收到这个回答信号后,就撤消数据和“输入准备好”信号。数据到达接口中后,接口会在“状态寄存器”中设置输入准备好标志,或者向CPU发一个中断请求。CPU可用查询方式或中断方式从接口中读取数据。接口中的数据被读取后,接口会自动清除状态寄存器中的标志,且撤消对CPU的中断请求。在输出过程中,每当输出寄存器可以接收数据,接口就会将状态寄存器中“输出准备好”状态置1或向CPU发一个中断请求,CPU可用查询或中断方式向接口输出数据。当CPU输出的数据到达接口后,接口会清除“输出准备好”状态,把数据送往外设,并向外设发一个“数据输出准备好”信号。外设受到驱动后,便接收数据,并向接口电路发一个“输出回答”信号,接口收到该回答信号后,又将状态寄存器中“输出准备好”置位,以便CPU输出下一个数据。8253:对CLK信号进行“减1计数”。首先CPU把“控制字”,写入“控制寄存器”,把“计数初始值”写入“初值寄存器”,然后, 定时/计数器按控制字要求计数。计数从“计数初始值 开始,每当CLK信号出现一次,计数值减1,当计数值减为0时,从OUT端输出规定的信号(具体形式与工作模式有关)。当CLK信号出现时,计数值是否减1(即是否计数),受到“门控信号”GATE的影响,一般,仅当GATE有效时,才减1.门控信号GATE如何影响计数操作,以及输出端OUT在各种情况下输出的信号形式与定时/计数器的工作模式有关。8259:1. IR线上提出了中断请求的中断源,即出现请求,IRR中断请求寄存器(共有8位D7~D0)对应于连接在IR0~IR7线上的外设的中断请求,哪一根输入线有请求,哪一根输入线就置1。2. 若OCW1(IMR中断屏蔽寄存器)未使该中断请求屏蔽(对应位为0时不屏蔽),该请求被送入PR(优先权分析器)比较。否则,不送入PR比较。3. PR把新进入的请求与ISR(服务中寄存器)中正在被处理的中断进行比较。如果新进入的请求优先级较低,则8259不向CPU提出请求。如果新进入的请求优先级较高,则8259使INT引脚输出高电平,向CPU提出请求。4. 如果CPU内部的标志寄存器中的IF(中断允许标志)为0,CPU不响应该请求。若IF=1,CPU在执行完当前指令后,从CPU的INTA引脚上向8259发出两个负脉冲。5.第一个 INTA负脉冲到达8259时,8259完成以下三项工作:a.使IRR(中断请求寄存器)的锁存功能失效。这样一来,在IR7~IR0上的请求信号就不会被8259接收。直到第二个INTA负脉冲到达8259时,才又使IRR的锁存功能有效。b.使ISR(服务中寄存器)中的相应位置1。c.使IRR中的相应位清0。6.第二个INTA负脉冲到达8259时,8259完成以下工作:a.将中断类型码(ICW2中的值)送到数据总线上,CPU将其保存在“内部暂存器”中。b.如果ICW4(它设定级中断联方式之特定完全嵌套方式,将在8259的工作方式中详述ICW4)中设置了中断自动结束方式,则将ISR的相应位清0。

什么是编译程序和汇编程序?

分类: 电脑/网络 问题描述: 什么是编译程序和汇编程序?他们有什么区别?和机器语言、高级语言汇编语言有什么样的联系 解析: 用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。 编译程序转换过的叫目标程序,也就是机器语言。 编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序为止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的"对话",随时可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将高级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。

汇编程序的任务是( )

第一遍:确定机器码第二遍:确定相对偏移量

汇编程序是怎么编译的?

汇编语言是一种低级语言,汇编语言是汇编指令集、伪指令集和使用它们规则的统称,使用具有一定含义的符号为助忆符,用指令助忆符、符号地址等组成的符号指令称为汇编格式指令。过程:编辑:用编辑软件(EDIT.EXE或记事本)形成源程序(.ASM)汇编:用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.OBJ),格式如下:MASM LX.ASM;连接:用连接程序(LINK.EXE)对目标程序进行连接,形成可执行文件(.EXE),格式如下:LINK LX.OBJ;执行:如果结果在屏幕在显示,则直接执行可执行文件。调试:用调试程序(LINK.EXE)对可执行文件进行调试,格式如下:DEBUG LX.EXE汇编语言中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。汇编程序(如MASM)的原理实际上就是把汇编的代码转成电脑可以识别的二进制码

1、汇编程序与汇编语言源程序的区别?

汇编程序是汇编语言源程序经过编译后的结果用标号是为了标记程序段,内存段,跳转位置等等loop p ov add1可以

c语言中如何调用汇编程序

汇编语言的基本格式为: PUBLIC _FOUND _TEXT SEGMENT BYTE PUBLIC "CODE"ASSUME CS: _TEXT _FOUND PROC NEARPUSH BPMOV BP,SPMOV CX,[BP+4]DEC CXMOV SI,[BP+10]LODSWMOV DX,1 MOV BX,0 COMP: CMP AX,[SI]JA BIGGERMOV AX,[SI]MOV BX,DXBIGGER: INC SIINC SIINC DXLOOP COMPMOV DI,[BP+6] MOV [DI],AX MOV DI,[BP+8] MOV [DI],BXPOP BPRET_FOUND ENDP_TEXT ENDSEND为了看得更清楚,我们把代码去掉,留下基本框架: PUBLIC _FOUND _TEXT SEGMENT BYTE PUBLIC "CODE"ASSUME CS: _TEXT _FOUND PROC NEARPUSH BPMOV BP,SP  ......... ;从这里开始加入汇编代码 POP BPRET_FOUND ENDP_TEXT ENDSEND这是在samll(小模式)下的汇编语言接口框架,在加入代码处,写上你所要完成一定功能的汇编代码,就成为一个可供TC调用的汇编模块。 可以看出,代码段是以带下划线的标识符开头的。 代码段的标识为_TEXT,由C程序中调用的函数found在这里也是以下划线标出:_FOUND。 下面是代码段的组成: _TEXT SEGMENT BYTE PUBLIC "CODE" _TEXT ENDS下面是函数的组成: _FOUND PROC NEAR _FOUND ENDP 在small(小模式下,只要按照以上的格式书写汇编代码,就一定能成功地被C程序调用。 这个格式是TC编译程序所定好了的,如果不按照这个格式书写汇编代码,调用就不会成功。

给下面汇编程序添加注释

1.把十六进制259F转换为是进制9631data_seg segment DATAX dw 259FHdata_seg endscode_seg segmentmain proc farassume cs:code_seg,ds:data_segstart: push ds sub ax,ax push ax;以上几句,保存返回地址 mov ax,data_seg mov ds,ax;定义数据段址 mov bx,DATAX ;取待转换十六进制数259FH mov cx,1000d ;CX←1000 call div_display mov cx,100d ;CX←100 call div_display mov cx,10d ;CX←10 call div_display mov cx,1d ;CX←1 call div_display mov ah,07;等待按键 int 21h ret;按任一键,退出程序 main endp div_display proc near mov dx,0;高位DX清0 mov ax,bx;首次取259FH,其后是取回余数 div cx;除以CX mov bx,dx;余数送BX暂存 mov dl,al;商送DL add dl,30h;化为相应数的ASCII码 mov ah,02h;输出DL中的字符 int 21h ret;子程序返回div_display endpcode_seg endsend start 2.统计十六进制数1CE8中 1的个数data_seg segment DATAX dw 1CE8Hdata_seg endscode_seg segmentmain proc far assume cs:code_seg,ds:data_segstart: push ds sub ax,ax push ax mov ax,data_seg mov ds,ax mov dl,0;计数器清0 mov ax,DATAX;取1CE8Hrepeat: test ax,0ffffh;测试,AX和FFFFH相与 jz to_print;为0转显示 jns shift;测试结果为正数,转标号shift inc dl;计数器+1shift: shl ax,1;AX左移一位 jmp repeat;转标号repeat执行to_print: cmp dl,0ah;DL与10做比较 js dis_num1;DL<9转标号dis_num1 add dl,37h;DL中数转为ASCII码(A~F) jmp display1dis_num1: add dl,30h;;DL中数转为ASCII码(0~9)display1: mov ah,02 int 21h;输出DL中的一个字符 mov ah,07 int 21h;暂停 ret main endp code_seg ends end start

什么是汇编语言源程序,汇编程序,目标程序

汇编语言源程序就是你根据汇编语言书写规范编写的完成指定功能的汇编语言指令集合,是一个文本文件。汇编程序是一个工具软件,负责对你前面编写的源程序文件进行编译,形成编译文件。目标程序就是能够被CPU最终识别执行的目标代码,由与汇编程序配套的连接程序完成。

一道汇编程序题

MOV BX,0024H ;BX=0024HLEA BX,[BX] ;BX=0024H(取0024的地址,还是0024)OR BX,0 ;BX=0024H(零的或运算,结果不变,但CF=0)ADC BX,[BX] ;CF+0024H+2856H=287AH结果:BX=287AHCF=0 ;没有进位发生OF=0 ;没有溢出发生

什么是汇编程序,编译程序,解释程序?分别说明他们的功能

【汇编程序】:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。【编译程序】:把用高级程序设计语言书写的源程序,翻译成等价的计算机汇编语言或机器语言的目标程序的翻译程序。【解释程序】:对源程序边解释翻译成机器代码边执行的高级语言程序。高级语言的程序的执行的途径:1)源程序(高级语言)->【编译程序】->目标程序(汇编语言)->【汇编程序】->目标程序(机器语言)->计算结果2)源程序(高级语言)->【编译程序】->目标程序(机器语言)->计算结果3)源程序(高级语言)->【解释程序】(逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序)->计算结果

什么是汇编程序,编译程序,解释程序?它们的功能是什么?

什么是汇编程序、编译程序、解释程序?它们的功能是什么?初学者,就不用理解那么多了。当你编写几个程序之后,这些问题,根本就算不上问题了。

请问汇编程序, 解释程序, 编译程序分别指?

1、汇编程序把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,但是汇编出的目标程序占用内存较少、运行效率较高,且能直接引用计算机的各种设备资源。它通常用于编写系统的核心部分程序,或编写需要耗费大量运行时间和实时性要求较高的程序段。2、解释程序解释程序是一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的内部形式(中间代码)。因此,解释程序并不产生目标程序,这是它和编译程序的主要区别。3、编译程序编译程序也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。扩展资料:工作过程1、汇编程序输入汇编语言源程序。检查语法的正确性,如果正确,则将源程序翻译成等价的二进制或浮动二进制的机器语言程序,并根据用户的需要输出源程序和目标程序的对照清单;如果语法有错,则输出错误信息,指明错误的部位、类型和编号。最后,对已汇编出的目标程序进行善后处理。2、解释程序由总控程序完成初始化工作。依次从源程序中取出一条语句进行语法检查,如有错,输出错误信息;如果通过了语法检查,则根据语句翻泽成相应的指令并执行它。检查源程序是否已经全部解释执行完毕,如果未完成则继续解释并执行下一条语句,直到全部语句都处理完毕。3、编译程序先进行词法分析与语法分析,然后生成中间代码,接着对程序进行多种等价变换来代码优化,最后生成目标代码。参考资料来源:百度百科—汇编程序参考资料来源:百度百科—解释程序参考资料来源:百度百科—编译程序

汇编程序和汇编源程序有什么区别?两者的作用是什么?

汇编软件(如MASM)将汇编源程序(由汇编指令和伪指令组成,拓展名是ASM)弄成可以执行的程序(如EXE和COM)

汇编程序

楼主没有说干什么的,补充完整。莫名奇妙的问题

汇编程序

;首先,这里面有in.h、input和output函数等,你没有的话,我传给你;另外,程序需要在dos下ml和link,命令你不知道的话我告诉你;程序先要求输入命令,我加入了“0”这条命令,表示结束程序;若不输入0,则程序会回到开始重新开始新的循环;排序方法是冒泡排序法,分别写了两个子程序.386.MODEL FLATExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORDINCLUDE io.hcr EQU 0dhLf EQU 0ah.STACK 4096.DATAout0 byte "请输入命令:1表示输入 2代表增序 3代表降序", cr, Lf, 0out1 byte "请输入所需的数的个数", cr, Lf, 0out2 byte "请输入数据", cr, Lf, 0out3 byte "结果是:", cr, Lf, 0out4 byte "输入错误", cr, Lf, 0lenth dword 1 ; //记录要输入的数的个数,初始为1number dword 20 DUP (?) ; 最多20个数string byte 11 DUP (?), 0newline byte cr, Lf, 0PUBLIC _start.Code_start:begin:output out0input string, 11atod stringcmp eax, 0 ; 输入0表示终止程序je endofcmp eax, 1je inputnumbercmp eax, 2jne else1call increasejmp outoutelse1:cmp eax, 3jne else2call decreasejmp outoutelse2:output out4jmp begininputnumber:output out1input string, 11atod stringmov lenth, eaxmov ecx, eaxlea edi, numberoutput out2forinput:input string, 11atod stringmov [edi], eaxadd edi, 4loop forinputjmp beginoutout:output out3mov ecx, lenthlea edi, numberforoutput:dtoa string, [edi]output stringadd edi, 4loop foroutputoutput newline ; 输出回车jmp beginendof:INVOKE ExitProcess, 0increase PROC NEAR32 ; 增序排列mov eax, lenthbegin1:dec eaxcmp eax, 0jng end1mov ecx, eaxlea edi, numberforincrease:mov ebx, [edi]cmp ebx, [edi+4]jng nochange1mov ebx, [edi]xchg ebx, [edi+4]xchg ebx, [edi]nochange1:add edi, 4loop forincreasejmp begin1end1:retincrease ENDPdecrease PROC NEAR32 ; 降序排列mov eax, lenthbegin2:dec eaxcmp eax, 0jng end2mov ecx, eaxlea edi, numberfordecrease:mov ebx, [edi]cmp ebx, [edi+4]jnl nochange2mov ebx, [edi]xchg ebx, [edi+4]xchg ebx, [edi]nochange2:add edi, 4loop fordecreasejmp begin2end2:retdecrease ENDPEND

求解释汇编程序

1、c口高四位和低四位的输入输出定义不是根据同组的A口或者B口决定的。因为这里没有用到C口,所以你随便设置为02、MOV DL,0FFH MOV AH,06H INT 21H 是DOS中断服务功能号为06H---直接控制台I/O服务。当DL=0FFH时候,是从标准输入(键盘)获得用户按键(不等待),当DL=字符ASCII码时候向标准输出(屏幕)输出

单片机汇编程序

晕!1分钟定时,真的要那么麻繁吗?这是练手程序吧?!

帮忙注释下这个汇编程序

data segment buf1 db "16jzs: $" ;显示输入十六进制数提示信息 buf2 db "10jzs: $" ;显示输出十进制数显示信息 pab dw 10000,1000,100,10,1 data ends stack segment para stack "stack" ;定义一个堆栈段db 10 dup (?) ;申请10个字节的空间stack ends ;段定义结束code segment assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax ;把数据段的地址传到数据段寄存器mov si,offset pab ;把pab的地址给simov dx,offset buf1 ;同上mov ah,9 int 21h ;调用9号dos功能xor ax,ax ;清零axxor bx,bx ;清零bxmov ch,4 qq:mov ah,1 int 21h ;调用1号dos功能cmp al,"f";比较al的值和f ja exit1 ;如果不低于或等于则跳转到exit1jmp aaa1 ;无条件跳转到aaa1bbb1:cmp al,"F" ;比较al的值和FJa exit1 ;jmp aaa2 bbb2:cmp al,"9"; 比较al的值和9ja exit1 ;如果不低于或等于则跳转到exit1jmp ccc2 ;无条件跳转到ccc2cmp al,"a" ;比较al的值和9jae ccc1 ;高于或等于则转移到ccc1jmp bbb1 ;无条件转移ccc1:sub al,20h ;减法cmp al,"A" aaa2: cmp al,"A" jae ccc2 jmp bbb2 ccc2: cmp al,"0" jb exit1 sub al,30h cmp al,9 ja nex jmp oo nex:sub al,7 oo:and al,0fh add bl,al cmp ch,1 jz www mov cl,4 shl bx,cl dec ch jnz qq www:mov dl,13 mov ah,2 ;dos功能调用int 21h mov dl,10 int 21h mov dx,offset buf2 mov ah,9 int 21h mov ax,bx mov bp,ax lop0:xor cl,cl mov bx,[si] lop1: 循环sub ax,bx jb next inc cl jmp lop1 next:add ax,bx push ax ;进栈add cl,30h call disp ;子程序调用pop ax inc si inc si cmp bx,1 jnz lop0 jmp exit1 disp proc mov dl,cl mov ah,2 int 21h ret;返回调用前的 disp endp exit1:mov ah,4ch int 21h code ends end start;结束不是很难,耐心的看一下就懂了

汇编程序

MOV AX,1234H ;将1234H放到寄存器AX里面MOV BX,5678H ;将1234H放到寄存器BX里面ADD AL,BL ;将AX的地位AL,和BX的地位BL,即AL=34H+78H=BCH(16进制)DAA ;压缩BCD码调整指令(AL=AL+60H),即AL调整后,AL=12H(CF=1)MOV CL,AL ;AL赋值到CLMOV AL,AH ;AL赋值到AHADC AL,BH ;带进位相加,AL=AL+BH +CF=69HDAA ;压缩BCD调整。AL=69H执行程序后(AL),(CL) 结果AL=69H,CL=12HDAA指令功能是将超过A0H的数值加60H后转换为十进制表示的数。不超A0H不用加60H。

如何运行汇编程序

现在有汇编的集成软件~如果没有集成软件的你就找link.exe跟masm.exe写好程序后存储~然后运行link.exe~弹出个dos对话框~把*.asm文件拖进去或者输入文件路径~按3次回车~此过程是编译过程~如果程序编译不通过会在这里提示~编译通过3次回车之后dos窗口关闭~文件存储位置会多一个*.obj文件~运行masm.exe~也是弹出dos窗口~将obj文件拖入窗口或者输入路径~3次回车~生成*.exe文件~生成的exe可以直接运行~既是你写的程序所执行的文件

c语言中如何调用汇编程序

1、如果汇编程序是可执行文件,比如exe文件,则可以使用system函数直接调用。比如下面的代码,用system()打开windows上的记事本程序。#include #include int main(){system("notepad.exe");return 0;}2、在C语言源码中,可以通过内联汇编来直接编写汇编程序代码。不同的编译器使用内联汇编的方法不同,vc/vs编译器中一般使用__asm关键字来使用内联汇编,gcc编译器一般使用asm关键字来使用内联汇编,以vc6.0为例,下面的代码通过使用内联汇编来计算1+1,并将结果保存到int型变量result中。#include int main(){int result;_asm {mov eax,1mov ebx,1add eax,ebxmov result, eax}printf("1+1=%d ", result);return 0;}

什么是汇编语言源程序,汇编程序,目标程序

汇编语言源程序就是你根据汇编语言书写规范编写的完成指定功能的汇编语言指令集合,是一个文本文件。汇编程序是一个工具软件,负责对你前面编写的源程序文件进行编译,形成编译文件。目标程序就是能够被CPU最终识别执行的目标代码,由与汇编程序配套的连接程序完成。

汇编程序解释

花钱买毕设吧, 潇洒了四年 是该花点钱毕业了

怎么用电脑的命令符窗口进行汇编程序?

你的安装汇编语言编译器 masm之类的工具

什么是编译程序和汇编程序?

用汇编语言或高级语言编写的程序,必须先送入计算机,经过转换成用机器语言表示的目标程序(这个过程即编译),才能由计算机执行。执行转换过程的程序叫编译程序。汇编程序是指没有编译过的汇编语言源文件。编译程序转换过的叫目标程序,也就是机器语言。编译程序的工作情况有三种:汇编型、解释型和编译型。汇编型编译程序用来将汇编语言编写的程序,按照一一对应的关系,转换成用机器语言表示的程序。解释型编译程序将高级语言程序的一个语句,先解释成为一组机器语言的指令,然后立即执行,执行完了,取下一组语句解释和执行,如此继续到完成一个程序为止。用解释型编译程序,执行速度很慢,但可以进行人和计算机的"对话",随时可以修改高级语言的程序。BASIC语言就是解释型高级语言。编译型编译程序将高级语言编写的程序,一次就会部翻译成机器语言表示的程序,而且过程进行很快,在过程中,不能进行人机对话修改。FORTRAN语言就是编译型高级语言。

汇编程序是指用汇编语言编写的源程序,不同计算机的汇编程序通常是相同的

是的,这个说法是正确的

汇编程序是指由汇编语言编写的程序,对么?

汇编程序语言是一门编程语言汇编程序只是个程序不过它是由汇编语言编写的程序

什么是汇编程序,编译程序,解释程序?分别说明他们的功能

程序按执行方式分为编译和解释两种。编译就是将各种语言编写的程序翻译成机器语言(二进制)的过程。编译好程序就是编译程序。编译程序在执行时不依靠其它程序,执行速度快。缺点是要对其修改非常麻烦,一般要将其反编译成高级语言,修改后在编译,往往一个程序要反复修改的话就非常麻烦。解释是程序在执行时外部程序进行翻译。其特点与编译相反,是解释一句执行一句,这样以来如果有大规模的程序运行会起来比较慢,而且其依靠能对其进行解释的外部环境;但因为只在运行时才进行解释,事先无需对整篇程序进行编译,修改起来就比较方便。我们非常熟悉C语言、Basic语言等就都提供编译和解散两种执行方式,我们可以以解释的方式对其进行调试、修改,而把定型后的程序整篇进行编译,以便日后执行。再说明白些,就像一片英文报告,编译就是把它整篇翻译成中文后让我们来看,解释就是它一句一句翻译给我们听。汇编语言是一种使用广泛、功能强大基础的编程语言(和C语言、basic语言、VC、Java等语言一样,都是一个编程工具而且),用汇编语言编写的程序就是汇编程序。

请问汇编程序, 解释程序, 编译程序分别指?

请问汇编程序, 解释程序, 编译程序分别指?初学者,就不用理解那么多了。当你编写几个程序之后,这些问题,根本就算不上问题了。

汇编程序如何运行

  汇编程序是用伪代码编写而成,一定要编译成机器码才能运行。不过假如汇编程序不大,可以在DEBUG内编写和调试运行。具体步骤是:   1、点击开始里的运行选项,输入字母cmd,打开命令提示符;   2、输入cd,进入C盘根目录;   3、输入debgm,调用程序运行指令;   4、在debug模式中,就可以输入自己想运行的汇编指令。

汇编程序和汇编源程序有什么区别?两者的作用是什么?

一、结构不同1、汇编程序:汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。2、汇编源程序:汇编源程序 = 汇编指令 + 伪指令。二、组成不同1、汇编程序:一个汇编程序是由多个段组成的,这些段被用来存放代码、数据、或当作栈空间来使用。2、汇编源程序:源程序中最终由计算机执行、处理的指令或数据。三、分类不同1、汇编程序:简单汇编程序、模块汇编程序、条件汇编程序、宏汇编程序、高级汇编程序。2、汇编源程序:分为伪指令(编译器处理)和汇编指令(编译为机器码)。

【汇编程序】的意思是什么?【汇编程序】是什么意思?

【汇编程序】的意思是什么?【汇编程序】是什么意思? 【汇编程序】的意思是: 一种语言翻译程序。能把用汇编语言编写的源程序翻译成目标程序。能检查源程序中的语法错误,并打印出有错的语句行和出错信息。产生的目标程序与源程序的语句一一对应。★「汇编程序」在《汉语辞海》的解释 汇编程序是什么意思 一种语言翻译程序。能把用汇编语言编写的源程序翻译成目标程序。能检查源程序中的语法错误,并打印出有错的语句行和出错信息。产生的目标程序与源程序的语句一一对应。 ★「汇编程序」在《汉语辞海》的解释 用汇编程序造句 1.按行汇编程序;逐行汇编程序2.汇编程序接受助记符源码程序,并产生机器目标模块;3.汇编程序设计中,用项和括号对的组合所代表的一个或多个操作。4.汇编程序设计中使用的一种名(字)项。5.汇编程序在预汇编时对其求值的一种表达式。6.在汇编程序设计中,指出定点数或浮点数的小数部分在目标代码中所占用的位数。>

BASIC语言解释程序属于()。 A 应用软件 B 系统软件 C 编译程序的一种 D 汇编程序的一种

BASIC语言解释程序属于编译程序的一种。BASIC语言是将用BASIC语言编写的源程序逐条解释并执行,不产生目标程序。编译程序将源程序翻译成目标程序,然后计算机才能执行,每种高级语言应配有相应的编译程序。用汇编语言编写的源程序要经过汇编程序汇编成用机器语言表示的目标程序之后,计算机才能执行。扩展资料:作为一个具有实际应用价值的编译程序的基本功能是把源程序(高级语言)翻译成目标程序。其功能有助于用户利用多种程序设计语言编写应用程序或套用已有的不同语言书写的程序模块。广泛地用于翻译规模较大、复杂性较高、且需要高效运行的高级语言书写的源程序。特点是高级语言和汇编语言的合用。这不但可以弥补高级语言难于表达某些非数值加工操作或直接控制、访问外围设备和硬件寄存器之不足,而且还有利于用汇编语言编写核心部分程序,以提高运行效率。

AT89S52单片机的汇编程序如下,请帮我写成C语言的。这是个写串行LCD驱动的子程序。【会追加200分的!】

23233

怎样用PID算法对恒温箱的温度进行控制,求相关的51单片机汇编程序

本设计要求:本温度控制系统为以单片机为核心,实现了对温度实时监测和控制,实现了控制的智能化。设计恒温箱温度控制系统,配有温度传感器,采用DS18B20数字温度传感器,无需数模拟∕数字转换,可直接与单片机进行数字传输,采用了PID控制技术,可以使温度保持在要求的一个恒定范围内,配有键盘,用于输入设定温度;配有数码管LED用来显示温度。技术参数和设计任务:1、利用单片机AT89C2051实现对温度的控制,实现保持恒温箱在最高温度为110℃。2、可预置恒温箱温度,烘干过程恒温控制,温度控制误差小于±2℃。3、预置时显示设定温度,恒温时显示实时温度,采用PID控制算法显示精确到0.1℃。4、温度超出预置温度±5℃时发出声音报警。5、对升、降温过程没有线性要求。6、温度检测部分采用DS18B20数字温度传感器,无需数模拟∕数字转换,可直接与单片机进行数字传输7、人机对话部分由键盘、显示和报警三部分组成,实现对温度的显示、报警。需要的话联系用户名扣扣

怎样用PID算法对恒温箱的温度进行控制,求相关的51单片机汇编程序

本设计要求:本温度控制系统为以单片机为核心,实现了对温度实时监测和控制,实现了控制的智能化。设计恒温箱温度控制系统,配有温度传感器,采用DS18B20数字温度传感器,无需数模拟∕数字转换,可直接与单片机进行数字传输,采用了PID控制技术,可以使温度保持在要求的一个恒定范围内,配有键盘,用于输入设定温度;配有数码管LED用来显示温度。技术参数和设计任务:1、利用单片机AT89C2051实现对温度的控制,实现保持恒温箱在最高温度为110℃。2、可预置恒温箱温度,烘干过程恒温控制,温度控制误差小于±2℃。3、预置时显示设定温度,恒温时显示实时温度,采用PID控制算法显示精确到0.1℃。4、温度超出预置温度±5℃时发出声音报警。5、对升、降温过程没有线性要求。6、温度检测部分采用DS18B20数字温度传感器,无需数模拟∕数字转换,可直接与单片机进行数字传输7、人机对话部分由键盘、显示和报警三部分组成,实现对温度的显示、报警。需要的话联系用户名扣扣

简单题微机原理与接口技术,汇编语言,用汇编程序写这个函数,高分求答案

CODE SEGMENT   BUFF_X DB -7  ;-128~+127   BUFF_Y DB ?   ASSUME CS:CODE,DS:CODESTART:   PUSH CS   POP  DS   MOV  BUFF_Y,-1   MOV  AL,BUFF_X   AND  AL,AL   JS  EXIT   JZ  AD1   ADD  BUFF_YAD1:       ADD  BUFF_YEXIT:   MOV  AH,4CH   INT  21HCODE ENDS   END  START

汇编程序改正

ORG 0030H ; INT0 中断 应该 ORG 0003H T0 中断 应该 ORG 000BH JMP T0_IN ; 转移 目标 没有 LOOP: ; 中断入口 没有用, 不影响编译 RETI .,

急求89c51单片机万年历汇编程序DS1302的

typedef struct __SYSTEMTIME__{ unsigned char Second; unsigned char Minute; unsigned char Hour; unsigned char Week; unsigned char Day; unsigned char Month; unsigned char Year; unsigned char DateString[11]; unsigned char TimeString[9];}SYSTEMTIME; //定义的时间类型SYSTEMTIME CurrentTime;#define AM(X) X#define PM(X) (X+12) // 转成24小时制#define DS1302_SECOND 0x80 //时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8C void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数){ unsigned char i; ACC = d; for(i=8; i>0; i--) { DS1302_IO = ACC0; //相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC >> 1; } }unsigned char DS1302OutputByte(void) //实时时钟读取一字节(内部函数){ unsigned char i; for(i=8; i>0; i--) { ACC = ACC >>1; //相当于汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; } return(ACC); }void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址, ucData: 要写的数据{ DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); // 地址,命令 DS1302InputByte(ucDa); // 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0;} unsigned char Read1302(unsigned char ucAddr) //读取DS1302某地址的数据{ unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); // 地址,命令 ucData = DS1302OutputByte(); // 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData);}void DS1302_GetTime(SYSTEMTIME *Time) //获取时钟芯片的时钟数据到自定义的结构型数组{ unsigned char ReadValue; ReadValue = Read1302(DS1302_SECOND); Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MINUTE); Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR); Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_DAY); Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_WEEK); Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH); Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR); Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); }void DateToStr(SYSTEMTIME *Time) //将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString[]{ if(hide_year<2) //这里的if,else语句都是判断位闪烁,<2显示数据,>2就不显示,输出字符串为 2007/07/22 { Time->DateString[0] = "2"; Time->DateString[1] = "0"; Time->DateString[2] = Time->Year/10 + "0"; Time->DateString[3] = Time->Year%10 + "0"; } else { Time->DateString[0] = " "; Time->DateString[1] = " "; Time->DateString[2] = " "; Time->DateString[3] = " "; } Time->DateString[4] = "/"; if(hide_month<2) { Time->DateString[5] = Time->Month/10 + "0"; Time->DateString[6] = Time->Month%10 + "0"; } else { Time->DateString[5] = " "; Time->DateString[6] = " "; } Time->DateString[7] = "/"; if(hide_day<2) { Time->DateString[8] = Time->Day/10 + "0"; Time->DateString[9] = Time->Day%10 + "0"; } else { Time->DateString[8] = " "; Time->DateString[9] = " "; } if(hide_week<2) { week_value[0] = Time->Week%10 + "0"; //星期的数据另外放到 week_value[]数组里,跟年,月,日的分开存放,因为等一下要在最后显示 } else { week_value[0] = " "; } week_value[1] = ""; Time->DateString[10] = ""; //字符串末尾加 "" ,判断结束字符}void TimeToStr(SYSTEMTIME *Time) //将时,分,秒数据转换成液晶显示字符放到数组 TimeString[];{ if(hide_hour<2) { Time->TimeString[0] = Time->Hour/10 + "0"; Time->TimeString[1] = Time->Hour%10 + "0"; } else { Time->TimeString[0] = " "; Time->TimeString[1] = " "; } Time->TimeString[2] = ":"; if(hide_min<2) { Time->TimeString[3] = Time->Minute/10 + "0"; Time->TimeString[4] = Time->Minute%10 + "0"; } else { Time->TimeString[3] = " "; Time->TimeString[4] = " "; } Time->TimeString[5] = ":"; if(hide_sec<2) { Time->TimeString[6] = Time->Second/10 + "0"; Time->TimeString[7] = Time->Second%10 + "0"; } else { Time->TimeString[6] = " "; Time->TimeString[7] = " "; } Time->DateString[8] = "";}void Initial_DS1302(void) //时钟芯片初始化{ unsigned char Second=Read1302(DS1302_SECOND); if(Second&0x80) //判断时钟芯片是否关闭 { Write1302(0x8e,0x00); //写入允许 Write1302(0x8c,0x07); //以下写入初始化时间 日期:07/07/25.星期: 3. 时间: 23:59:55 Write1302(0x88,0x07); Write1302(0x86,0x25); Write1302(0x8a,0x07); Write1302(0x84,0x23); Write1302(0x82,0x59); Write1302(0x80,0x55); Write1302(0x8e,0x80); //禁止写入 }}