汇编经典代码

合集下载

常见汇编代码

常见汇编代码

常见汇编代码汇编语言是一种低级语言,主要用于编写计算机的指令集。

在程序开发和系统调试中,掌握常见的汇编代码是非常重要的。

本文将介绍一些常见的汇编代码及其用途。

一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将BX寄存器中的数据复制到AX寄存器中。

2. XCHG:交换两个位置的数据。

例如,XCHG AX, BX将AX寄存器和BX寄存器中的数据进行交换。

3. PUSH:将数据推入栈中。

例如,PUSH AX将AX寄存器的数据推入栈中。

4. POP:将数据从栈中弹出。

例如,POP AX将从栈中弹出的数据存储到AX寄存器中。

二、算术指令1. ADD:将两个数相加并将结果存储在目标位置。

例如,ADD AX, BX将AX寄存器和BX寄存器中的数据相加,并将结果存储到AX寄存器中。

2. SUB:将两个数相减并将结果存储在目标位置。

例如,SUB AX, BX将AX寄存器中的数据减去BX寄存器中的数据,并将结果存储到AX寄存器中。

3. MUL:将两个数相乘并将结果存储在目标位置。

例如,MUL AX, BX将AX寄存器和BX寄存器中的数据相乘,并将结果存储到AX寄存器中。

4. DIV:将两个数相除并将结果存储在目标位置。

例如,DIV AX, BX将AX寄存器中的数据除以BX寄存器中的数据,并将商存储到AX寄存器中。

三、逻辑指令1. AND:对两个数进行逻辑与操作,并将结果存储在目标位置。

例如,AND AX, BX将AX寄存器和BX寄存器中的数据进行逻辑与操作,并将结果存储到AX寄存器中。

2. OR:对两个数进行逻辑或操作,并将结果存储在目标位置。

例如,OR AX, BX将AX寄存器和BX寄存器中的数据进行逻辑或操作,并将结果存储到AX寄存器中。

3. XOR:对两个数进行逻辑异或操作,并将结果存储在目标位置。

例如,XOR AX, BX将AX寄存器和BX寄存器中的数据进行逻辑异或操作,并将结果存储到AX寄存器中。

汇编语言程序代码

汇编语言程序代码

汇编语言程序代码尽管现代编程语言如Java、Python等变得越来越流行,但汇编语言仍然是计算机科学领域中重要的一部分。

汇编语言是一种低级语言,它直接与计算机的硬件交互。

本文将介绍一些常见的汇编语言程序代码示例,帮助读者更好地理解和应用汇编语言。

1. 汇编语言入门汇编语言是一种基于机器指令的编程语言,它将符号标签与机器指令一一对应。

下面是一个简单的汇编语言程序示例:```assemblysection .datamessage db "Hello, World!", 0section .textglobal _start_start:; write the message to standard outputmov eax, 4 ; system call number for writemov ebx, 1 ; file descriptor for standard outputmov ecx, message ; pointer to the messagemov edx, 13 ; message lengthint 0x80 ; trigger the system call; exit the programmov eax, 1 ; system call number for exitxor ebx, ebx ; exit code 0int 0x80 ; trigger the system call```以上汇编代码实现了在屏幕上输出"Hello, World!"的功能。

它使用了Linux内核的系统调用接口来完成输入输出操作。

2. 汇编语言的数据处理汇编语言可以直接对计算机的寄存器和内存进行操作,因此具有较高的灵活性和效率。

下面是一个将两个数字相加并输出结果的示例:```assemblysection .datanum1 dd 42num2 dd 23result dd 0section .textglobal _start_start:; load the values of num1 and num2 into registers mov eax, [num1]mov ebx, [num2]; add the valuesadd eax, ebx; store the result into memorymov [result], eax; convert the result to string for printingmov ebx, resultmov ecx, 10xor edx, edxdiv ecxadd edx, '0'mov byte [ebx+4], dlmov ax, dxxor edx, edxdiv ecxadd edx, '0'mov byte [ebx+3], dlmov ax, dxxor edx, edxdiv ecxadd edx, '0'mov byte [ebx+2], dlmov ax, dxxor edx, edxdiv ecxadd edx, '0'mov byte [ebx+1], dlmov ax, dxadd al, '0'mov byte [ebx], al; write the result to standard output mov eax, 4mov ebx, 1mov ecx, resultmov edx, 5int 0x80; exit the programmov eax, 1xor ebx, ebxint 0x80```以上汇编代码将数字42和23相加,并将结果输出到屏幕上。

常用汇编指令

常用汇编指令

常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。

在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。

本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。

一、数据传输指令1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将寄存器BX的内容复制到AX中。

2. LEA指令:LEA指令用于将内存地址加载到寄存器中。

例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。

3. PUSH指令:PUSH指令用于将数据压入栈中。

例如,PUSH AX将AX中的数据压入栈中。

4. POP指令:POP指令用于从栈中弹出数据。

例如,POP BX将栈中的数据弹出到BX中。

二、算术运算指令1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在目标操作数中。

例如,ADD AX, BX将BX的值加到AX中。

2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。

例如,SUB AX, BX从AX中减去BX的值。

3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。

例如,MUL BX将累加器的值与BX相乘。

4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。

例如,DIV BX将累加器的值除以BX。

三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。

例如,AND AX, BX将AX与BX进行逻辑与操作。

2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。

例如,OR AX, BX将AX与BX进行逻辑或操作。

3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。

(完整版)8086汇编经典例程,推荐文档

(完整版)8086汇编经典例程,推荐文档

sub bl,26 mov al,'a' add al,bl
MOV CX,00H WAIT1: LOOP WAIT1
;延时计数器 ;延时
DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8
jmp next40
DEC DX
next24: sub bl,52
==========================================
MAIN ENDP
MOV AX,[SI]
5. 编写一个数组排序(从小到大)的小程序,数组在程
序中定义,程序先将原数组显示一遍,然后排序,再
DISP PROC
将排好序的数组显示一遍。
PUSH SI
==========================================
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100
crlf proc push ax push dx
音演奏歌曲 ========================================== ;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽
ccc segment assume cs:ccc,ds:qqq
main proc far start: mov ax,qqq
mov ds,ax
next3:
jmp next10 cmp al,'a' jnae next4 cmp al,'z' ja next4 sub al,'a'

汇编的基本常用指令

汇编的基本常用指令

汇编的基本常用指令汇编语言是一种底层的程序设计语言,主要用于编写机器码指令。

以下是一些常用的汇编指令:1. MOV:将数据从一个位置复制到另一个位置。

2. ADD:将两个操作数相加,并将结果存储在目的操作数中。

3. SUB:将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

4. INC:将一个操作数的值增加1。

5. DEC:将一个操作数的值减少1。

6. CMP:比较两个操作数的值,并将结果影响到标志寄存器中。

7. JMP:无条件跳转到指定的代码位置。

8. JZ / JE:当指定的条件成立时,跳转到指定的代码位置(零标志或相等标志)。

9. JNZ / JNE:当指定的条件不成立时,跳转到指定的代码位置(非零标志或不相等标志)。

10. JL / JB:当源操作数小于目的操作数时,跳转到指定的代码位置(小于标志或借位标志)。

11. JG / JA:当源操作数大于目的操作数时,跳转到指定的代码位置(大于标志或进位标志)。

12. CALL:调用一个子程序或函数。

13. RET:返回子程序或函数的调用处。

14. NOP:空操作,用于占位或调整程序代码的位置。

15. HLT:停止运行程序,将CPU置于停机状态。

这里只列举了一些基本的汇编指令,实际上汇编语言有更多更复杂的指令,具体使用哪些指令取决于所使用的汇编语言和目标处理器的指令集架构。

继续列举一些常用的汇编指令:16. AND:将两个操作数进行按位与运算,并将结果存储在目的操作数中。

17. OR:将两个操作数进行按位或运算,并将结果存储在目的操作数中。

18. XOR:将两个操作数进行按位异或运算,并将结果存储在目的操作数中。

19. NOT:对一个操作数的每一位进行取反操作。

20. SHL / SAL:将一个操作数的每一位向左移动指定的位数。

对于无符号数,使用SHL指令;对于带符号数,使用SAL指令。

21. SHR:将一个操作数的每一位向右移动指定的位数,高位空出的位使用0填充。

常用汇编代码

常用汇编代码

# 常见汇编代码 #1. 编写程序:比较AX,BX,CX中带符号数的大小,将最大的数放在AX中code segmentassume cs:codemov ax,32mov bx,74mov cx,23sort: cmp ax,bxjge X ;如果ax大于等于bx就跟cx比较xchg ax,bxX:cmp ax,cx ;如果ax大于cxjge Yxchg ax,cxY:int 21hmov ax,4c00hcode endsend sort2.要求对键盘输入的小写字母用大写字母显示出来code segmentassume cs:codestart: mov ah,1int 21hcmp al,'a'jz errorcmp al,'z'ja errorsub al,20h ;'A'~'Z':41~5AH ‘a'~'z':61~7ahmov dl,almov ah,2int 21hjmp starterror:retcode endsend start3.编写程序:从键盘上接收一个四位数的十进制数,并在终端上显示出与它等值的二进制数。

code segmentassume cs:codebegin:xor bx,bx ;清空bxmov ch,4mov cl,4 ;设置内外层的循环次数input:shl bx,cl ;bx中的内容逻辑左移mov ah,1int 21h ;输入cmp al,30h ;是否小于0jb input ;是就重新输入cmp al,39h ;是否大于9ja inputand al,0fh ;转换为相应的二进制jmp combinecombine:or bl,aldec chjnz inputdisplay:mov cx,16 ;输出的循环次数print:mov dl,0rol bx,1rcl dl,1or dl,30h ;清空dlmov ah,2int 21hloop printretcode endsend begin4.将内存ffff:0~ffff:d单元中的数据复制到0:200~0:20d单元中。

单片机汇编语言经典一百例

单片机汇编语言经典一百例

单片机汇编语言经典一百例汇编语言是一种底层的程序设计语言,是一种将汇编指令直接翻译成机器指令的语言。

在单片机编程中,掌握汇编语言是非常重要的,因为它可以充分发挥单片机的性能,并且提高程序的运行效率。

本文将介绍一百个经典的单片机汇编语言例子,帮助读者更好地理解汇编语言的使用。

1. 点亮LED灯```ORG 0x0000 ; 程序起始地址MOV P1, #0xAA ; P1口输出高电平,LED灯点亮END ; 程序结束```2. LED流水灯效果```ORG 0x0000 ; 程序起始地址MOV P1, #0x01 ; P1口输出低电平,第一个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x02 ; P1口输出低电平,第二个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x04 ; P1口输出低电平,第三个LED点亮CALL DELAY ; 调用延时函数MOV P1, #0x08 ; P1口输出低电平,第四个LED点亮CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```3. 数码管动态扫描显示```ORG 0x0000 ; 程序起始地址CLR P0.0 ; P0.0口输出低电平,选择第一个数码管MOV P2, #0x7E ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.1 ; P0.1口输出低电平,选择第二个数码管MOV P2, #0x30 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.2 ; P0.2口输出低电平,选择第三个数码管MOV P2, #0x6D ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数CLR P0.3 ; P0.3口输出低电平,选择第四个数码管MOV P2, #0x79 ; 将数码管对应的值存放到P2口CALL DELAY ; 调用延时函数…DELAY: ; 延时函数MOV R0, #100 ; 设置延时时间DELAY_LOOP:DJNZ R0, DELAY_LOOP ; 循环减一RET ; 返回END ; 程序结束```...通过以上例子,我们可以看到单片机汇编语言的应用非常广泛,可以实现各种各样的功能。

汇编语言代码例子

汇编语言代码例子

汇编语言代码例子汇编语言代码例子是指使用汇编语言编写的代码,它是机器语言的一种表示形式,主要用于编写计算机的低级程序,而不是用于创建高级程序。

汇编语言的特点是可以迅速地将机器指令转换为机器代码,并且可以编写出非常高效的程序,也就是所谓的“驱动程序”,它们能够直接控制计算机硬件,如CPU、内存和磁盘。

汇编语言代码例子包括:1. MOV 命令。

MOV 是移动指令,是把某个寄存器中的值移动到另一个寄存器中,或者把内存地址中的值移动到寄存器中,如:mov ax, bx 将bx中的值移动到ax中。

2. ADD 命令。

ADD 是加法指令,是把某个寄存器中的值和另一个寄存器中的值相加,或者把内存地址中的值和寄存器中的值相加,如:add ax, bx 将bx中的值和ax中的值相加。

3. SUB 命令。

SUB 是减法指令,是把某个寄存器中的值和另一个寄存器中的值相减,或者把内存地址中的值和寄存器中的值相减,如:sub ax, bx 将bx中的值从ax中减去。

4. MUL 命令。

MUL 是乘法指令,是把某个寄存器中的值和另一个寄存器中的值相乘,或者把内存地址中的值和寄存器中的值相乘,如:mul ax, bx 将bx中的值和ax中的值相乘。

5. DIV 命令。

DIV 是除法指令,是把某个寄存器中的值和另一个寄存器中的值相除,或者把内存地址中的值和寄存器中的值相除,如:div ax, bx 将bx中的值从ax中除去。

6. CMP 命令。

CMP 是比较指令,是把某个寄存器中的值和另一个寄存器中的值进行比较,或者把内存地址中的值和寄存器中的值进行比较,如:cmp ax, bx 将bx中的值和ax中的值进行比较。

7. JMP 命令。

JMP 是跳转指令,是根据条件跳转到指定的指令处执行,如:jmp label 跳转到“label”标记处执行。

8. CALL 命令。

CALL 是调用指令,是把子程序调用到当前程序中,如:call subroutine 调用名为“subroutine”的子程序。

汇编语言常用指令大全

汇编语言常用指令大全

汇编语言常用指令大全汇编语言是一种计算机编程语言,使用指令来控制计算机硬件执行特定的操作。

在本文中,我们将介绍一些常用的汇编语言指令,以帮助读者更好地理解和学习汇编语言。

一、数据传输指令1. MOV:将数据从一个位置复制到另一个位置。

例子:MOV AX, BX 将寄存器BX中的值复制到寄存器AX中。

2. PUSH:将数据压入堆栈。

例子:PUSH AX 将寄存器AX中的值压入堆栈。

3. POP:从堆栈中弹出并获取数据。

例子:POP AX 从堆栈中弹出一个值,并将其存入寄存器AX中。

二、算术指令1. ADD:将两个操作数相加。

例子:ADD AX, BX 将寄存器AX和BX中的值相加,并将结果存入寄存器AX中。

2. SUB:将一个操作数从另一个操作数中减去。

例子:SUB AX, BX 将寄存器BX中的值从寄存器AX中减去,并将结果存入寄存器AX中。

3. MUL:将两个操作数相乘。

例子:MUL AX, BX 将寄存器AX和BX中的值相乘,并将结果存入寄存器AX中。

三、逻辑指令1. AND:进行逻辑与操作。

例子:AND AX, BX 对寄存器AX和BX中的值进行逻辑与操作,并将结果存入寄存器AX中。

2. OR:进行逻辑或操作。

例子:OR AX, BX 对寄存器AX和BX中的值进行逻辑或操作,并将结果存入寄存器AX中。

3. NOT:进行逻辑非操作。

例子:NOT AX 对寄存器AX中的值进行逻辑非操作。

四、条件分支指令1. JMP:无条件跳转到指定的地址。

例子:JMP label 跳转到标记为label的地址。

2. JZ:当操作数为零时跳转到指定的地址。

例子:JZ label 如果寄存器AX中的值为零,则跳转到标记为label 的地址。

3. JC:当进位标志为1时跳转到指定的地址。

例子:JC label 如果进位标志位为1,则跳转到标记为label的地址。

五、循环指令1. LOOP:当计数器不为零时,循环执行指定的代码块。

汇编指令大全+很全的汇编指令

汇编指令大全+很全的汇编指令

for Addition)
1. 调整操作如下
格式: DAA
(1) 若(AL) and 0FH>9 或 AF=1
,则(AL)<--(AL)+6,AF<--1,对低
功能: 对AL中的两个组合进制数相加的结果进行调 四位的调整.
整,调整结果仍放在AL中,进位标志放在CF中.
(2) 若(AL) and 0F0H>90H 或
6 LAHF 标志传送指令 LAHF 格式: LAHF
2. 本指令不影响状态标位,表格 长度不超过256字节.
说明: 该指令不影响FLAG的原来 内容,AH只是复制了原FLAG的低8 位内容.
功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)<-
-(FLAG)7~0
7 SAHF 标志传送指令 SAHF
说明:
格式: DEC OPRD 功能: OPRD<--OPRD-1
1. OPRD 为寄存器或存储器操作 数.
2. 这条指令执行结果影响AF、 OF、PF、SF、ZF标志位,但不影 响CF标志位.
页码,4/22
星尘-易尘
302 NEG 303 CMP
304 AAS 305 DAS 306 MUL
取补指令 NEG(NEGate)
未组合的十进制加法调整指令 AAA(ASCII Adgust 说明:
for Addition)
1. 组合的十进制数和未组合的
格式: AAA
十进制数:在计算中,十进制数可
用四位二进制数编码,称为BCD
功能: 对两个组合的十进制数相加运算(存在AL中) 码.
的结果进行调整,产生一个未组合的十进制数放在
AX中.
SUB [BX+25],AX

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例汇编语言是一种用来编写计算机指令的低级语言,它与机器语言十分接近,可以直接控制计算机硬件。

而C语言是一种高级程序设计语言,它具有结构化编程和模块化设计的特点。

本文将介绍51单片机汇编语言和C语言的经典实例,并进行详细解析。

一、LED指示灯的闪烁我们首先来看一个经典的51单片机汇编语言的实例——LED指示灯的闪烁。

我们可以通过控制单片机的IO口来实现LED的闪烁效果。

以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV P1, #0; 将 P1 置为0,熄灭LEDLJMP $ ; 无限循环```以上代码使用了51单片机的MOV指令和LJMP指令。

MOV指令用来将一个立即数(这里是0)存储到寄存器P1中,控制对应的I/O口输出低电平,从而熄灭LED。

而LJMP指令则是无条件跳转指令,将程序跳转到当前地址处,实现了无限循环的效果。

对应的C语言代码如下:```c#include <reg51.h>void main() {P1 = 0; // 将 P1 置为0,熄灭LEDwhile(1); // 无限循环}```以上代码使用了reg51.h头文件,该头文件提供了对51单片机内部寄存器和外设的访问。

通过将P1赋值为0,控制IO口输出低电平,实现了熄灭LED的效果。

while(1)是一个无限循环,使得程序一直停留在这个循环中。

二、数码管的动态显示接下来我们介绍51单片机汇编语言和C语言实现数码管动态显示的经典实例。

数码管动态显示是通过控制多个IO口的高低电平来控制数码管显示不同的数字。

以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV A, #0FH ; 设置数码管全亮,A存储数码管控制位MOV P2, A ; 将 A 的值存储到 P2,控制数码管的数码控制位DELAY: ; 延时循环MOV R7, #0FFH ; 设置延时计数值LOOP1: ; 内层循环MOV R6, #0FFH ; 设置延时计数值LOOP2: ; 内部延时循环DJNZ R6, LOOP2 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ R7, LOOP1 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ A, DELAY ; A减1并判断是否为0,不为0则继续循环JMP DELAY ; 无限循环,实现动态显示```以上代码中,我们通过MOV指令来将一个立即数(0x0F)存储到寄存器A中,控制数码管显示0-9的数字。

20个简单汇编语言程序

20个简单汇编语言程序

20个简单汇编语言程序以下是20个简单的汇编语言程序示例:1. 计算两个数的和:MOV AX, 5。

ADD AX, 3。

这段代码将 5 存储在 AX 寄存器中,然后将 3 加到 AX 中,最终 AX 中的值为 8。

2. 比较两个数的大小:MOV AX, 5。

CMP AX, 3。

这段代码将 5 存储在 AX 寄存器中,然后将 AX 中的值与 3 进行比较。

3. 循环打印数字:MOV CX, 10。

MOV AX, 1。

LOOP_START:MOV DL, AL.ADD DL, 48。

MOV AH, 2。

INT 21h.INC AL.LOOP LOOP_START.这段代码使用循环打印数字 1 到 10。

4. 计算阶乘:MOV CX, 5。

MOV AX, 1。

LOOP_START:MUL CX.LOOP LOOP_START.这段代码计算 5 的阶乘,并将结果存储在 AX 寄存器中。

5. 判断奇偶数:MOV AX, 7。

AND AX, 1。

这段代码将 7 存储在 AX 寄存器中,然后将 AX 中的值与 1进行与运算,结果为 1,表示奇数。

6. 字符串反转:MOV SI, OFFSET str.MOV DI, OFFSET str.MOV CX, LENGTHOF str.DEC CX.REVERSE_LOOP:MOV AL, [SI]MOV DL, [DI+CX]MOV [DI+CX], AL.MOV [SI], DL.INC SI.LOOP REVERSE_LOOP.这段代码将字符串 `str` 反转。

7. 计算斐波那契数列:MOV CX, 10。

MOV AX, 0。

MOV BX, 1。

FIB_LOOP:ADD AX, BX.XCHG AX, BX.LOOP FIB_LOOP.这段代码计算斐波那契数列的前 10 个数。

8. 判断一个数是否为质数:MOV AX, 17。

MOV BX, 2。

CHECK_PRIME:XOR DX, DX.DIV BX.CMP DX, 0。

常用汇编指令

常用汇编指令

常用汇编指令汇编语言是一种机器语言的高级表示形式,其指令集是CPU所支持的指令集。

在计算机编程中,汇编语言是一种非常重要的编程语言,它可以直接操作硬件资源,实现底层控制和优化性能。

下面将介绍一些常用的汇编指令。

1. MOV指令MOV指令用于将数据从一个位置复制到另一个位置,其语法如下:MOV destination, source其中destination表示目标操作数,source表示源操作数。

例如:MOV AX, BX这条指令将BX寄存器中的值复制到AX寄存器中。

2. ADD和SUB指令ADD和SUB指令分别用于加法和减法运算,其语法如下:ADD destination, sourceSUB destination, source其中destination表示目标操作数,source表示源操作数。

例如:ADD AX, BXSUB AX, BX这两条指令分别将BX寄存器中的值加到AX寄存器中,并从AX寄存器中减去BX寄存器中的值。

3. INC和DEC指令INC和DEC指令分别用于对一个操作数进行加1或减1运算,其语法如下:INC destinationDEC destination其中destination表示目标操作数。

例如:INC AXDEC AX这两条指令分别将AX寄存器中的值加1或减1。

4. CMP指令CMP指令用于比较两个操作数的大小,其语法如下:CMP operand1, operand2其中operand1和operand2表示要比较的两个操作数。

例如:CMP AX, BX这条指令将比较AX寄存器中的值和BX寄存器中的值,并设置标志位以表示它们之间的关系。

5. JMP指令JMP指令用于无条件跳转到另一个程序地址,其语法如下:JMP address其中address表示要跳转到的地址。

例如:JMP 1000h这条指令将跳转到程序中地址为1000h处执行。

6. JZ和JNZ指令JZ和JNZ指令分别用于根据标志位进行条件跳转,其语法如下:JZ addressJNZ address其中address表示要跳转到的地址。

常见汇编程序源代码示例

常见汇编程序源代码示例
pop eax
ret
disp endp
done:
call dispcrlf
mov eax,offset maxn
call dispmsg
mov eax,ecx
call dispuid
call dispcrlf
exit 0
end start
;运行结果:
;1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 2
thirdsmall:
mov eax,edx
mov edx,ecx
mov ecx,ebx
mov ebx,eax
jmp order
;如果第三个数在最中间
thirdmid:
xchg ecx,edx
jmp order
;执行至此,三个数(ebx,ecx,edx)已经从小到大排序
order:
mov eax,ebx
jmp last
zhijiao:
mov eax,offset msg_zhijiao
call dispmsg
jmp last
dengbian:
mov eax,offset msg_dengbian
call dispmsg
jmp last
dengyao:
mov eax,offset msg_dengyao
xor edx,edx;数组下标
again:
mov eax,array[edx*4];取出下标为edx的数组元素
inc edx
cmp eax,0
jg positive
msg_wrong byte 'wrong',13,10,0;无法构成三角形

整理几个汇编语句代码的解析

整理几个汇编语句代码的解析

整理几个汇编语句代码的解析汇编语言是一种低级程序设计语言,它直接操作计算机的硬件和指令。

在编写汇编代码时,我们需要了解每个指令的含义和功能,以便正确地解析和理解代码。

本文将整理几个常见的汇编语句代码,并进行解析。

以下是这几个代码的具体内容和解析。

代码一:```MOV AX, 5MOV BX, 10ADD AX, BX```解析:这段代码是用汇编语言编写的加法运算程序。

首先,将数值5加载到AX寄存器中,将数值10加载到BX寄存器中。

然后,将AX寄存器中的值与BX寄存器中的值相加,并将结果存回AX寄存器中。

这段代码的执行结果是将5和10相加得到15,并将结果存放在AX寄存器中。

代码二:```MOV CX, 0LOOP_START:CMP CX, 5JE LOOP_ENDINC CXJMP LOOP_STARTLOOP_END:```解析:这段代码是一个简单的循环程序,用于计算从0到5的累加和。

首先,将0加载到CX寄存器中作为计数器的初始值。

然后,通过与5进行比较,判断是否到达循环结束的条件。

如果CX等于5,则跳转到LOOP_END,否则将CX寄存器的值加1,并跳转到LOOP_START。

循环结束后,程序将跳转到LOOP_END处执行相关操作。

代码三:```MOV AH, 2MOV DL, 'A'INT 21h```解析:这段代码通过汇编语言实现了在屏幕上输出字母'A'的功能。

首先,将值2加载到AH寄存器中,表示将字符输出到屏幕上。

然后,将字母'A'的ASCII码值加载到DL寄存器中。

最后,使用21h中断调用,将DL寄存器中的值输出到屏幕上。

执行该代码后,屏幕上将显示字母'A'。

代码四:```MOV AL, 0xFFAND AL, 0x0F```解析:这段代码展示了如何使用与操作符进行位运算。

首先,将0xFF加载到AL寄存器中,0xFF是一个二进制数,所有位上的值都为1。

汇编语言指令汇总

汇编语言指令汇总

汇编语言指令汇总汇编语言是一种低级编程语言,它直接操作计算机硬件,使用指令来完成特定的任务。

下面是一些常用的汇编语言指令汇总。

1.操作数传送指令:-MOV:将数据从一个位置复制到另一个位置。

-XCHG:交换两个位置中的数据。

2.算术指令:-ADD:将两个数相加并将和存储在指定位置。

-SUB:将两个数相减并将差存储在指定位置。

-MUL:将两个数相乘并将结果存储在指定位置。

-DIV:将两个数相除并将商存储在指定位置。

-INC:将一个数增加1-DEC:将一个数减少13.逻辑指令:-AND:对两个数进行逻辑与操作并将结果存储在指定位置。

-OR:对两个数进行逻辑或操作并将结果存储在指定位置。

-XOR:对两个数进行逻辑异或操作并将结果存储在指定位置。

-NOT:对一个数进行逻辑非操作并将结果存储在指定位置。

4.控制指令:-JMP:无条件跳转到指定位置。

-JZ:如果前一条指令的结果为0,则跳转到指定位置。

-JNZ:如果前一条指令的结果不为0,则跳转到指定位置。

-JC:如果前一条指令产生进位,则跳转到指定位置。

-JNC:如果前一条指令不产生进位,则跳转到指定位置。

5.栈操作指令:-PUSH:将数据放入栈中。

-POP:将栈顶的数据弹出。

6.输入输出指令:-IN:从外部设备中读取数据。

-OUT:将数据发送到外部设备。

7.循环指令:-LOOP:根据计数寄存器的值,重复执行指定的代码块。

8.过程调用指令:-CALL:调用一个子程序。

-RET:从子程序返回。

9.字符串指令:-MOVS:将一个字节或一个字从一个位置复制到另一个位置。

-CMPS:将两个位置中的字节或字进行比较。

除了以上提到的指令外,不同的汇编语言还有其它特定的指令,用于特定的硬件操作或功能实现。

这些指令的语法与使用方法可能略有不同,具体请参考所使用的汇编语言的文档或手册。

总之,汇编语言指令是汇编语言的基础,熟练掌握和理解这些指令对于编写高效和可靠的汇编程序至关重要。

汇编语言程序代码

汇编语言程序代码

MOV(MOVe)传送指令PUSH 入栈指令POP 出栈指令XCHG(eXCHanG)交换指令XLAT(TRANSLATE)换码指令LEA (Load Effective Address)有效地址送寄存器指令LDS(Load DS with pointer)指针送寄存器和DS指令LES(Load ES with pointer)指针送寄存器和ES指令LAHF(Load AH with Flags)标志位送AH指令SAHF(Store AH into Flgs) AH送标志寄存器指令PUSHF(PUSH the Flags)标志进栈指令POPF(POP the Flags)标志出栈指令ADD 加法指令ADC 带进位加法指令INC 加1指令SUB(SUBtract)不带借位的减法指令SBB(SuVtrach with borrow)带借位的减法指令DEC(DECrement)减1指领NEG(NEGate)求补指令CMP(CoMPare)比较指令MUL(unsinged MULtiple)无符号数乘法指令IMUL(sIgned MUL tiple)有符号数乘法指令DIV(unsigned DIVide)无符号数除法指令IDIV(sIgned DIVide)有符号数除法指令CBW(Count Byte to Word)字节转换为字指令CWD(Count Word to Doble word)字转换为双字指令DAA 压缩的BCD码加法十进制调整指令DAS 压缩的BCD码减法十进制调整指令AAA 非压缩的BCD码加法十进制调整指令AAS 非压缩的BCD码加法十进制调整指令AND 逻辑与指令OR 逻辑或指令XOR 逻辑异或指令NOT 逻辑非指令TEST 测试指令SHL(SHift logical Letf)逻辑左移指令SHR(SHift logical Right)逻辑右移指令ROL(Rotate Left )循环左移指令ROR(Rotate Right)循环右移指令RCL(Rotate Left through Carry)带进位循环左移RCR(Rotate Right through Carry)带进位循环左移MOVS(MOVe String)串传送指令STOS(STOre into String)存入串指令LODS(LOad from string)从串取指令REP(REPeat)重复操作前缀P61CLD(CLear Direction flag)清除方向标志指令STD(SeT Direction flag)设置方向标志指令CMPS(CoMPare String)串比较指令SCAS(SCAn String)串扫描指令REPE/REPZ(REPeat while Equal/Zero)相等/为零时重复操作前缀REPNE/REPNZ(REPeat while Not Equal/Zero)不相等/不为零进重复前缀IN(INput)输入指令OUT(OUTput)输出指令JMP(JuMP)无条件转移指令JZ,JNZ,JS,JNS,JO,JNO,JP,JNP,JB,JNB,JBE,JNBE,JL,JNL,JLE,JNLE,JCXZ 条件转移指令LOOP 循环指令LOOPZ/LOOPE 为零/相等时循环指令LOOPNZ/LOOPNE 不为零/不相等时循环指令CALL 子程序调用指令RET(RETun)子程序返回指令CLC(CLear Carry)进位位置0指令CMC(CoMplement Carry)进位位求反指令SRC(SeT Carry)进位位置1指令NOP(No OPeretion)无操作指令HLT(HaLT)停机指令OFFSET 返回偏移地址SEG 返回段地址EQU(=)等值语句PURGE 解除语句DUP 操作数字段用复制操作符SEGMENT,ENDS 段定义指令ASSUME 段地址分配指令ORG 起始偏移地址设置指令$ 地址计数器的当前值PROC,ENDP 过程定义语句NAME,TITLE,END 程序开始结束语句MACRO,ENDM 宏定义指令P99。

汇编语言代码例子

汇编语言代码例子

汇编语言代码例子在计算机编程中,汇编语言是一种低级语言,它以机器指令的形式直接操作计算机硬件。

汇编语言具有直接控制硬件、效率高、功能强大等优点,因此在一些系统级编程、驱动开发以及性能优化领域得到广泛应用。

本文将介绍一些汇编语言的代码例子,以帮助读者更好地理解和学习汇编语言。

一、Hello World程序我们先从一个经典的汇编语言例子开始:Hello World程序。

这个程序会在屏幕上显示"Hello, World!"。

```section .data ; 数据段msg db 'Hello, World!', 0 ; 定义一个字符串并以0结尾section .text ; 代码段global _start_start:; 将字符串地址存入寄存器ebxmov ebx, msg; 将字符串长度存入寄存器ecxmov ecx, len; 系统调用号存入寄存器eaxmov eax, 4; 系统调用int 0x80; 程序退出mov eax, 1xor ebx, ebxint 0x80```在这段代码中,`.data` 表示数据段,我们定义了一个字符串`msg`,用来存储要显示的内容。

`.text` 表示代码段,`_start` 是程序的入口点。

程序首先使用 `mov` 指令将字符串的地址存入寄存器 `ebx`,将字符串的长度存入寄存器 `ecx`。

然后使用 `mov` 指令将系统调用号 `4`(表示写入)存入寄存器 `eax`。

接着,使用 `int 0x80` 进行系统调用,将字符串显示在屏幕上。

最后,使用 `mov` 指令将 `1` 存入寄存器 `eax`,表示程序退出。

`xor` 指令用于将寄存器 `ebx` 的值清零,然后再次使用 `int 0x80` 进行系统调用,程序结束。

二、求和程序下面是一个汇编语言的代码例子,用来计算从1到n的所有整数的和。

```section .data ; 数据段n db 10 ; 要计算的整数范围section .text ; 代码段global _start_start:mov eax, 0 ; 将寄存器eax清零,用于存放求和结果xor ecx, ecx ; 将寄存器ecx清零,用于循环计数mov cl, [n] ; 将要计算的整数范围读入寄存器ecxloop_start:add eax, ecx ; 将寄存器ecx的值加到寄存器eax中loop loop_start ; 循环条件减1,如果ecx ≠ 0,则跳转到loop_start; 程序退出mov eax, 1xor ebx, ebxint 0x80```在这段代码中,`.data` 段中定义了一个变量 `n`,表示要计算的整数范围。

汇编经典代码

汇编经典代码

1.顺序程序设计将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

DATASEGMENTDATA1 DB 34H,35H,39H,38H,36H,' ';被加数DATA2 DB 37H,34H,33H,36H,32H,' ';加数DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,DATA1;有效地址送SI,为调用显示子程序做准备CALLDISPLAY;调用显示子程序CALLCRLF;调用回车换行子程序LEA SI,DATA2 ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备CALLDISPLAY;调用显示子程序CALLCRLF;调用回车换行子程序LEADI,DATA1;有效抵制送DI,为加法运算做准备MOVAX,0MOVBX,0MOVCL,05H;记录循环次数ADDS: MOVAL,[SI];将加数送往ALSUBAL,30HADDAL,BL;加上进位MOVBL,[DI];将被加数送往BLSUBBL,30HADDAL,BL;加法运算ADDAL,30HCMPAL,3AHJASUBA;结果>=10,跳到SUBAJBNSUBASUBA:SUBAL,0AH;减去10的值,并置BL为1MOVBL,01HJMPCONTINUENSUBA:MOVBL,00H;置BL为0CONTINUE:MOV[DI],AL;将相加的结果从AL送往DI的地址,即DATA1的地址INCDI;地址加1INCSI;地址加1LOOPADDS;循环JCSHUCHUJNCSHUCHU2SHUCHU2: MOVAL,31H;CF为1设置结果最高位为1JMPCONTINUE2SHUCHU:MOVAL,30H;CF为0设置结果最高位为0CONTINUE2:MOV[DI],ALMOVAX,4C00H;返回DOSINT21HMAINENDPCRLFPROCNEAR;回车、换行于功能 MOVDL,0DHMOVAH,02H INT21H MOVDL,0AHMOVAH,02H INT21HRETCRLFENDPDISPLAY PROCNEAR ;显示于功能MOVBX,0006H ;记录循环次数DSL:MOVDL,[SI+BX-1];将有效地址内的内容送往DLMOVAH,02 ;2号功能输出INT21HDECBX ;BX自动减1JNZDSLRETDISPLAY ENDPCODEENDSENDSTART2分支程序设计实验接收键盘输入字符,将其中的小写字母转换为大写字母并显示。

汇编各种编程代码

汇编各种编程代码

响铃data segmentN db ?flog dw ?flag dw ?count dw ?fre dw 50000log dw 30000str1 db 'the bell is ring','$' data endscode segment 'CODE'assume cs:code,ds:data start:mov ax,datamov ds,axmov al,1chmov ah,35hint 21hpush espush bxpush dsmov count,1mov flag,0lea dx,ringmov ax,seg ringmov ds,axmov al,1chmov ah,25hint 21hpop dsin al,21hand al,11111110bout 21h,alstiK0: cmp flag,1Jnz K1call soundlea dx,str1mov ah,9Hint 21Hmov flag,0mov count,182mov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21h K1: mov ah,0bhint 21hcmp al,0Jz K0pop bxpop dsmov al,1chmov ah,25hint 21hmov ah,4chint 21hring procpush axpush bxpush dxpush cxmov ax,datamov ds,axdec countJnz K7mov flag,1 K7:pop cxpop dxpop bxpop axiretring endp sound procpush axpush cxpush dxmov bx,fremov cx,logmov dx,cxin al,61hand al,0fch lk: xor al,2out 61h,almov cx,bx lk1:loop lk1dec dxjnz lkpop dxpop cxpop axretsound endpcode endsend start4-11从键盘上输入一串一‘$’为结束符的字符串,然后对其中的非数值字符计数,以十六进制形式输出显示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.顺序程序设计将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。

DATA SEGMENTDATA1 DB 34H,35H,39H,38H,36H,' ' ;被加数DATA2 DB 37H,34H,33H,36H,32H,' ' ;加数DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,DATA1 ;有效地址送SI,为调用显示子程序做准备CALL DISPLAY ;调用显示子程序CALL CRLF ;调用回车换行子程序LEA SI,DATA2 ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备CALL DISPLAY ;调用显示子程序CALL CRLF ;调用回车换行子程序LEA DI,DATA1 ;有效抵制送DI,为加法运算做准备MOV AX,0MOV BX,0MOV CL,05H ;记录循环次数ADDS: MOV AL,[SI] ;将加数送往ALSUB AL,30HADD AL,BL ;加上进位MOV BL,[DI] ;将被加数送往BLSUB BL,30HADD AL,BL ;加法运算ADD AL,30HCMP AL,3AHJA SUBA ;结果>=10,跳到SUBAJB NSUBASUBA: SUB AL,0AH ;减去10的值,并置BL为1MOV BL,01HJMP CONTINUENSUBA: MOV BL,00H ;置BL为0CONTINUE:MOV [DI],AL ;将相加的结果从AL送往DI的地址,即DATA1的地址INC DI ;地址加1INC SI ;地址加1LOOP ADDS ;循环JC SHUCHUJNC SHUCHU2SHUCHU2: MOV AL,31H ;CF为1设置结果最高位为1JMP CONTINUE2SHUCHU:MOV AL,30H ;CF为0设置结果最高位为0CONTINUE2:MOV [DI],ALLEA SI,DATA1 ;将DATA1的有效地址送往SI,为调用DISPLAY子程序做准备CALL DISPLAY ;调用DISPLAY子程序MOV AX,4C00H ;返回DOSINT 21HMAIN ENDPCRLF PROC NEAR ;回车、换行于功能MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETCRLF ENDPDISPLAY PROC NEAR ;显示于功能MOV BX,0006H ;记录循环次数DSL: MOV DL,[SI+BX-1] ;将有效地址内的内容送往DLMOV AH,02 ;2号功能输出INT 21HDEC BX ;BX自动减1JNZ DSLRETDISPLAY ENDPCODE ENDSEND START2 分支程序设计实验接收键盘输入字符,将其中的小写字母转换为大写字母并显示。

CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART: MOV AH,00HINT 16HCMP AL,0DHJZ OVERCALL JUDGEMOV DL,ALMOV AH,02HINT 21HJMP STARTOVER: MOV AH,4CHINT 21HMAIN ENDPJUDGE PROC NEARCMP AL,'a'JB STOPCMP AL,'z'JA STOPSUB AL,20HSTOP: RETJUDGE ENDPCODE ENDSEND START3 循环程序设计实验统计一个有10人的班中,男、女生的人数各为多少。

将男生人数存入变量MAN、女生人数存入变量WOMAN中。

DATA SEGMENTMAN DB 0,0WOMAN DB 0,0STRING DB ' iuput people number! (man is 0, woman is 1 ) $'SM DB 'man is :$'SW DB 'woman is :$'DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,09H ;将STRING的内容输出MOV DX,OFFSET STRINGINT 21HCALL CRLFMOV CX,10 ;男女生总人数AA: MOV AH,01H ;从键盘输入,0为男,1为女INT 21HCMP AL,30H ;与'0'比较JNZ ADDW ;不为'0',女生人数加1INC MAN ;否则男生人数加1BB: LOOP AAJMP DISPLY ;打印ADDW: INC WOMANJMP BBDISPLY: CALL CRLFMOV AH,09H ;字符串输出MOV DX,OFFSET SMINT 21HMOV AH,02H ;男生人数统计结果输出MOV DL,MANADD DL,30HCALL JUDGECALL CRLFMOV AH,09H ;字符串输出MOV DX,OFFSET SWINT 21HMOV AH,02H ;女生人数统计结果输出MOV DL,WOMANADD DL,30HCALL JUDGEMOV AH,4CH ;返回DOSINT 21HMAIN ENDPJUDGE PROC NEAR ;判断结果是否为39HCMP DL,3AHJZ SHICC: INT 21HRETSHI: MOV DL,31HINT 21HMOV DL,30HJMP CCJUDGE ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START4 子程序设计实验1.键盘输入字符,依次显示在行的最左端(即每接受一个字符,显示在屏幕上并回车换行。

)2.对频繁使用的回车换行编写为子程序,在主程序中调用完成分行显示。

CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART: MOV CX,10 ;设置循环次数NEXT: MOV AH,01H ;从键盘输入一个字符INT 21HCALL CRLF ;调用回车换行子程序LOOP NEXTMOV AH,4CH ;返回DOSINT 21HMAIN ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START5 码制转换程序实验将ASCⅡ码数据转换成二进制数据。

要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储。

DATA SEGMENTSTRING1 DB 'PLEASE INPUT A NUMBER(0~32767):$'STRING2 DB 'THE ASCII IS:$'STRING3 DB 'THE BINARY IS:$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1MOV AH,09HINT 21HCALL CRLFINPUT: MOV AH,01H ;输入数据INT 21HCMP AL,0DHJZ NEXTSUB AL,30HJL INPUTCMP AL,39HJG INPUTCBWXCHG AX,BX ;AX为输入值,BX保存结果,两个对调为MUL做准备MOV DX,10D ;将上一次结果乘10MUL DXXCHG AX,BX ;AX为本次输入的值,BX为之前的结果ADD BX,AXJMP INPUTNEXT: CALL CRLFMOV CL,4DMOV CH,4DMOV DX,OFFSET STRING2MOV AH,09HINT 21HCALL CRLFLOOP0: ROL BX,CL ;循环左移,将最高为存到BL的低四位MOV AL,BLAND AL,0FH ;ADD AL,30HCMP AL,3AHJL OUTPUTADD AL,07HOUTPUT:MOV AH,02HMOV DL,ALINT 21HDEC CHJNZ LOOP0CALL CRLFMOV DX,OFFSET STRING3MOV AH,09HINT 21HCALL CRLFMOV CH,16DMOV CL,1DLOOP1: ROL BX,CLMOV AL,BLAND AL,01HADD AL,30HMOV AH,02HMOV DL,ALINT 21HDEC CHJNZ LOOP1MOV AH,4CHINT 21HMAIN ENDPOUTS PROC NEAR ;字符串输出子程序MOV AH,09HINT 21HRETOUTS ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车INT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START6 两个数相乘的实验实现十进制数的乘法,被乘数和乘数均以ASCⅡ码形式放在内存中,乘积在屏幕上显示出来。

DATA SEGMENTMBCS DW 0MCS DW 0RESULT DW 0STRING1 DB 'THE BEICHENGSHU IS:$'STRING2 DB 'THE CHENGSHU IS:$'STRING3 DB 'THE RESULT IS:$'STRING DB 'THE ASCII IS:$'DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1CALL OUTSCALL INPUT ;输入被乘数MOV DX,OFFSET STRINGCALL OUTSCALL CRLFCALL ASCII ;被乘数转化为ASCII码输出CALL CRLFMOV MBCS,BX ;被乘数保存到MBCS中MOV DX,OFFSET STRING2CALL OUTSCALL INPUT ;输入乘数MOV DX,OFFSET STRINGCALL OUTSCALL CRLFCALL ASCII ;乘数转化为ASCII码输出CALL CRLFMOV MCS,BX ;乘数保存到MCS中MOV DX,OFFSET STRING3CALL OUTSCALL CRLFMOV AX,MBCS ;被乘数MUL BX ;乘数与被乘数相乘,结果高位DX,低位AXMOV RESULT,AX ;将AX中的内容保存到RESULT中MOV BX,DX ;将高位DX的值送给BX输出CALL ASCIIMOV BX,RESULT ;将低位AX的值送给BX输出CALL ASCIIMOV AH,4CHINT 21HMAIN ENDPINPUT PROC NEAR ;输入十进制数,将其转化为ASCII码存到BX中CALL CRLFMOV BX,0AA: MOV AH,01HINT 21HCMP AL,0DHJZ STOPSUB AL,30HJL AACMP AL,39HJG AACBWXCHG AX,BX ;AX为输入值,BX保存结果,两个对调为MUL做准备MOV DX,10D ;将上一次结果乘10MUL DXXCHG AX,BX ;AX为本次输入的值,BX为之前的结果ADD BX,AXJMP AASTOP: CALL CRLFRETINPUT ENDPASCII PROC NEARMOV CL,4DMOV CH,4DCC: ROL BX,CL ;循环左移,将最高为存到BL的低四位MOV AL,BLAND AL,0FH ;ADD AL,30HCMP AL,3AHJL BBADD AL,07HBB: MOV AH,02HMOV DL,ALINT 21HDEC CHJNZ CCRETASCII ENDPOUTS PROC NEARMOV AH,09HINT 21HRETOUTS ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START7 从键盘输入数据并显示的程序编写程序将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

相关文档
最新文档