汇编程序正负数及零的个数统计
汇编语言只用ADD指令实现整数和浮点数的加减乘法

lea bx,user_string
mov ah,0ah
int 21h
mov ch,0
add bx,2;指向真正字符串开始的位置
mov ah,0
mov cl,8
add cl,255
beginin:
mov al,[bx]
add al,208;将字符串变为数值
rol bx,1;取第一个操作码到cf
jnc INTEGER;CF=0
jc others;CF=1
INTEGER:
rol bx,1;取第二个操作码到cf
jnc INTEGERadd;CF=0
jc INTEGERsub;CF=1
INTEGERadd:
call INTEGER_ADD
INTEGERsub:
mov bl,0
rol bx,cl;取第二个定点数放到bl
mov cl,bl;转存到cl
and cx,cx
jz FLOATadd
test cx,10h
jz FLOATsub
test cx,20h
jz FLOATmul
FLOATadd:
call FLOAT_ADD
FLOATsub:
call FLOAT_SUB
INTEGER_ADD proc near
mov bl,0
mov cl,3
rol bx,cl;取第一个操作数放到bl
mov ch,bl;转存到ch
mov bl,0
rol bx,cl;取第二个操作数放到bl
mov cl,bl;转存到ch
add ch,cl;第一个操作数和第二个操作数做加法
mov result,ch
汇编加减乘除

汇编加减乘除
汇编语言是一种底层的计算机语言,用于控制计算机硬件进行加减乘除等基本运算。
加法是指将两个数值相加得到一个和,例如将数值A和数值B相加得到结果C。
在汇编语言中,可以使用ADD指令来进行加法运算。
减法是指从一个数值中减去另一个数值得到一个差值,例如从数值A中减去数值B得到结果C。
在汇编语言中,可以使用SUB指令来进行减法运算。
乘法是指将两个数值相乘得到一个积,例如将数值A和数值B相乘得到结果C。
在汇编语言中,可以使用MUL指令来进行乘法运算。
除法是指一个数值除以另一个数值得到一个商,例如将数值A除以数值B得到结果C。
在汇编语言中,可以使用DIV指令来进行除法运算。
汇编语言中的加减乘除运算可以用不同的寄存器来存储和操作数据。
例如,可以使用AX寄存器来存储一个加法操作的结果,使用BX 寄存器来存储一个减法操作的结果,使用CX寄存器来存储一个乘法操作的结果,使用DX寄存器来存储一个除法操作的结果。
总之,汇编语言提供了丰富的指令和寄存器来进行加减乘除等基本运算,通过合理的组合和操作这些指令和寄存器,可以实现复杂的计算功能。
单片机汇编案例之统计正负数个数

单⽚机汇编案例之统计正负数个数这是我单⽚机实验作业的源码,统计正负数个数。
写得不好,仅供参考。
如有BUG,欢迎指正。
;;;;本程序从键盘获取输⼊,并统计输⼊的正整数和负整数的个数,结果存于40H、41H;;;;;此处把0归于正数。
数值范围 -128 - 127ORG 00HLCALL GETKEY ;从键盘获取数据,输⼊的必须是⼗进制整数,可带负号,每个整数之间必须有其他字符LCALL Static ;统计正负数个数SJMP $;; 统计正负数个数Static:MOV R1, #30H ;数据地址指针MOV 41H, #00H ;统计正数个数由于统计⽤地址单元与数据区单元很近,数据区最多存放16个数据MOV 40H, #00H ;统计负数个数MOV 90H, R7MOV R2, 90H ;R2存放数据个数WHIL: ;取下⼀个数,判断正负MOV A, @R1JB ACC.7, NegeINC 40H ;正数SJMP IncRNege:INC 41H ;负数IncR:INC R1DJNZ R2, WHILRET;;串⼝通信模式1初始化initmod1:MOV TMOD, #20H ; 设置T1为模式2MOV TL1, #0E8H ; 装⼊定时常数, 波特率1200bit/sMOV TH1, #0E8H ; ⾃动重装MOV SCON, #50H ;设置串⾏通信模式1 ,允许接收SETB TR1 ; 启动T1RET;;;获取键盘输⼊,数据暂存50H, 再转换成数字存进30HGETKEY:LCALL String ;输出提⽰字符串LCALL Input ;获取键盘输⼊的字符串LCALL DeciRET;提⽰字符串:Enter a group decimal integer:MSG: DB 0x45,0x6e,0x74,0x65,0x72,0x20,0x61,0x20,0x67,0x72,0x6f,0x75,0x70,0x20,0x64,0x65,0x63,0x69,0x6d,0x61,0x6c,0x20,0x69,0x6e,0x74,0x65,0x67,0x65,0x72,0x3a,0x00 ;;发送字符串String:LCALL initmod1 ;串⼝通信模式1初始化MOV DPTR, #MSG ;取发送数据区⾸地址Show:CLR AMOVC A, @A+DPTRJZ Finish ;检查字符是否为结束标志0H, A=0,则字符输出完成MOV SBUF, A ;在UART窗⼝显⽰字符CLR TIJNB TI, $INC DPTRSJMP ShowFinish:CLR TR1 ;关闭定时器T1RET;;读取键盘输⼊字符串并存⼊以50H为⾸地址的单元Input:LCALL initmod1 ;串⼝通信模式1初始化MOV R0, #50H ;设接收数据的地址指针为R0Read: ;从UART窗⼝读取数据并打印CLR RIJNB RI, $MOV A, SBUFCJNE A, #0DH, Continue ;检查回车字符0DH, 不是回车继续读取SJMP ReadOver ;回车字符,结束读取Continue: ;打印⽤户输⼊并保存MOV SBUF, A ;打印接收到的数据CLR TIJNB TI, $CJNE A, #08H, Store ;检查退格字符\b, 不是退格,则保存数据DEC R0 ;是退格,数据指针回退SJMP ReadStore:MOV @R0, A ;保存数据INC R0 ;后移数据指针SJMP Read ;循环读取ReadOver: ;读取结束,在字符串后加上结束符0HMOV @R0, #00HCLR TR1 ;关闭定时器RET;;将⾸地址为50H的单元中的字符串转化为⼗进制数,存30H, 个数存R7;;可转化的字符串格式:-12, 30, -45 每个数之间必须有其他字符隔开 -12@34 也⾏表⽰-12和34 Deci:MOV R3, #30H ;R3指向存放⼗六进制数的地址MOV R1, #90H ;R1指向存放中间结果的地址MOV R2, #00H ;R2存放中间结果的位数MOV R0, #50H ;R0指向数据源MOV R7, #00H ;R7存放最后结果个数SJMP WhWhile:INC R0 ;有些分⽀直接跳转过来,R0还没加1,只好这样做了。
计算机组成原理与汇编语言程序设计课后习题及解答(详解)

计算机组成原理与汇编语言程序设计课后习题及解答徐洁,俸远祯电子工业出版社第1章习题一1.什么是程序存储工作方式?答:计算机的工作方式——存储程序工作方式。
即事先编写程序,再由计算机把这些信息存储起来,然后连续地、快速地执行程序,从而完成各种运算过程。
2.采用数字化方法表示信息有哪些优点?用数字化方法表示信息的优点:(1)抗干扰能力强, 可靠性高。
(2)依靠多位数字的组合,在表示数值时可获得很宽的表示范围以及很高的精度。
(3)数字化的信息可以存储、信息传送也比较容易实现。
(4)可表示的信息类型与范围及其广泛,几乎没有限制。
(5)能用逻辑代数等数字逻辑技术进行信息处理,这就形成了计算机硬件设计的基础。
3.如果有7×9点阵显示出字符A的图像,请用9个七位二进制代码表示A的点阵信息。
4.数字计算机的主要特点是什么?1. (1)能在程序控制下自动连续地工作;(2|)运算速度快;(3)运算精度高;(4)具有很强的信息存储能力;(5)通用性强,应用领域及其广泛。
5.衡量计算机性能的基本指标有哪些?答:衡量计算机性能的基本指标:(1)基本字长——参加一次运算的数的位数;(2)数据通路宽度——数据总线一次能并行传送的位数;(3)运算速度——可用①CPU的时钟频率与主频,②每秒平均执行指令数,③典型四则运算的时间来表示。
(4)主存储器容量——可用字节数或单元数(字数)×位数来表示。
(5)外存容量——常用字节数表示。
(6)配备的外围设备及其性能。
(7)系统软件配置。
7.系统软件一般包括哪些部分?列举你所熟悉的三种系统软件。
系统软件一般包括操作系统,编译程序、解释程序、各种软件平台等。
例如WINDOWS98操作系统,C 语言编译程序等,数据库管理系统。
8.对源程序的处理有哪两种基本方式?对源程序的处理通常有两种处理方式:解释方式和编译方式。
第2章习题二1.将二进制数(101010.01)2 转换为十进制数及BCD码。
微机原理软件实验报告

信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期:2011年12月实验一DEBUG的使用 (1)一、实验目的 (1)二、实验内容 (1)三、预习思考 (3)四、实验过程 (4)五、实验总结 (9)实验二分支、循环程序设计 (10)一、实验目的 (10)二、实验内容 (10)三、预习思考 (10)四、实验过程 (10)(一)、流程图 (11)(二)、源代码 (11)(三)、实验分析 (11)五、实验总结 (14)实验三代码转换程序设计 (15)一、实验目的 (15)二、实验内容 (15)三、预习思考 (15)四、实验过程 (16)(一)流程图 (16)(二)模块层次图 (16)(三)源代码 (17)(四)实验分析 (21)五、实验总结 (22)实验四子程序设计 (23)一、实验目的 (23)二、实验内容 (23)三、预习思考 (23)四、实验过程 (24)(一)流程图 (24)(二)模块层次图 (25)(三)源代码 (25)(四)实验分析 (34)五、实验总结 (35)实验五中断程序设计 (37)一、实验目的 (37)二、实验内容 (37)三、预习思考 (37)四、实验过程 (38)(一)流程图 (38)(二)源代码 (39)(三)实验分析 (45)五、实验总结 (46)实验一 DEBUG 的使用一、实验目的1.掌握汇编程序的编辑、编译、连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法。
二、实验内容1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20B DB 15Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件。
汇编语言小程序例子

盛年不重来,一日难再晨。
及时宜自勉,岁月不待人。
1.编写统计AX中1、0个数的源程序。
1的个数存入CH,0的个数存入CL。
CODE SEGMENTASSUME CS:CODESTART: MOV CX, 0MOV DX,17AA1: SUB DX, 1JZ AA3SHL AX, 1JNC AA2INC CHJMP AA1AA2: INC CLJMP AA1AA3: MOV AH,4CHINT 21HCODE ENDSEND START2.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显示“MATCH”,若不相同则显示“NO MATCH”。
程序:DATA SEGMENTR1 DB 'MATCH',0AH,0DHR2 DB 'NO MATCH',0AH,0DH STRING1 DB 'XXXXX'N1 EQU $-STRING1STRING2 DB 'YYYYY'N2 EQU $-STRING2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,N1CMP AX,N2JNZ AA1ADD AX,1LEA SI,STRING1LEA DI,STRING2AA2: MOV BL,[SI]MOV BH,[DI]INC SIINC DISUB AX,1JZ AA3CMP BL,BH JZ AA2JMP AA1AA3: LEA BX,R1 MOV CX,7 AA4: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA4JMP EAA1: LEA BX,R2 MOV CX,10 AA5: MOV DL,[BX] INC BXMOV AH,2INT 21HLOOP AA5INT 21HCODE ENDSEND START3.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。
汇编语言统计输入中各字符出现的次数

汇编语言统计输入中各字符出现的次数DATA SEGMENT BUFFER DB 100 DB ? DB 100 DUP(?)CHARS DB 'INPUT:$' DATA ENDS CODE SEGMENT ASSUMECS:CODE,DS:DATA MAIN PROC FAR PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX START: MOV DX,OFFSET CHARS MOV AH,9 INT 21H MOV DX,OFFSET BUFFER MOV AH,0AH INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H MOV SI,OFFSET BUFFER INC SI MOV AL,[SI] INC SI MOV DL,[SI] MOV DH,[SI]MOV DI,SI MOV CL,AL MOV CH,0 MOV BL,1 MOV BH,0 DEC CL GO1: INC SI CMP DL,[SI] JNE TO1 INC BL TO1: LOOP GO1 CALL OUTPUT MOV BL,1 TO5: INC DIDEC AL CMP AL,1 JE TO3 CMP DH,[DI] JE TO5 MOV DL,[DI] MOV SI,DI MOV CL,AL MOV CH,0 DEC CL GO2: INC SI CMP [SI],DL JNE TO2 INC BL MOV [SI],DH TO2: LOOP GO2 CALL OUTPUT MOV BL,1 JMP TO5 TO3: CMP DH,[DI] JE TO4 MOV DL,[DI] MOV BL,1 CALL OUTPUT TO4: RET MAINENDP ;?------------------------- OUTPUT PROC PUSH AX PUSH CX PUSHF MOV AH,2 INT 21H MOV DL,20H MOV AH,2 INT 21H MOV AL,BL MOV AH,0 MOV CL,10 DIV CL ADD AH,30H ADD AL,30H MOV CH,AH MOVDL,AL MOV AH,2 INT 21H MOV DL,CH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H POPF POP CX POP AX RET OUTPUT ENDP CODE ENDS END MAIN ;?-----------------第1页共1页。
汇编分类统计字符个数[精品]
![汇编分类统计字符个数[精品]](https://img.taocdn.com/s3/m/bef98ceffbb069dc5022aaea998fcc22bcd143fd.png)
分类统计字符个数00一、实验目的000通过编程实现字符进行分类统计。
00利用DOS功能调用INT 21H的10(0Ah)号功能,掌握进行键盘输入字符串的方法以及数据区设置。
00掌握8086指令: CMP、JB、JA、SHL、INC、LEA、INT、JNZ、SCASB、LOOPE/LOOPNE等。
00二、实验内容0001、编写一个程序实现将数据段中存储在STRING处到NUM处的字符串进行分类统计,然后将结果存入以letter、digit和other为名的存储单元中。
查找字符串STRING中是否有空格,如有找出第一个出现的位置(先用十六进制显示,后修改为十进制显示),否则输出N。
002、修改前述1的程序,实现从键盘输入一个以回车键作为结束符的字符串(字符个数不超过80个),存入BUF中,分类统计BUF中字符串,将结果存入以letter、digit和other为名的存储单元中,屏幕输出大小写字母个数、数字个数和其它字符个数,并查找字符串BUF中是否有空格,如有找出第一个出现的位置(用十进制显示),否则输出N。
(对有余力的同学)00实验结果:00DEBUG 调试并查看结果的正确性。
000对存储区STRING的内容“12ABCDE#!@Y(78)=(1).”000屏幕显示:00N00对存储区STRING的内容“12ABCD E#! @Y(78)=(1).”000屏幕显示:00Place=700对第2部分,如键盘输入0012ABCDE# 3456789143!@Y(78)=(1).回车000输出结果:00Letter=6000Digit=1500Other=900Place=900三、分析与体会00本次实验我花了较长的时间来完成。
初略的程序花了5个多小时完成。
后来遇到转换为十进制的时候就卡住了。
后来在第六周周三的时候听了课以后才会做。
00第一个代码很长,有340多行代码。
其实核心代码不多。
主要是每一次转换为16进制以及10进制的时候,重复了相同的代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
DA TA SEGMENT
NOTE0 DB 'DATA: ',0DH,0AH,'$'
NOTE1 DB 0DH,0AH,'GTEATZ $'
NOTE2 DB 0DH,0AH,'ZERO $'
NOTE3 DB 0DH,0AH,'LITTLEZ $'
BUFFER DW 14,-8,9,0,8,-3,-8,22,34,-24,21,46,75,23,-33
GREATZ DW ?
ZERO1 DW ?
LITTLEZ DW ?
MESS1 DB 0DH,0AH,'NAME:WUY AOZENG NO:12041215',0DH,0AH,'$' MESS2 DB 'NAME:XUTAO NO:12041429',0DH,0AH,'$'
OUT_STR DB 150 DUP('$')
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,ES:DA TA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
XOR AX,AX
MOV GREATZ,AX
MOV ZERO1,AX
MOV LITTLEZ,AX
MOV CX,14
LEA SI,BUFFER+2
ST_COUNT:
MOV AX,[SI]
ADD SI,2
AND AX,AX
JLE COUNT1
INC GREATZ
JMP COUNT3
COUNT1:
JL COUNT2
INC ZERO1
JMP COUNT3
COUNT2:
INC LITTLEZ
COUNT3:
DEC CX
JNZ ST_COUNT
LEA DX,NOTE0
MOV AH,09H
INT 21H
LEA BX,BUFFER
MOV CX,14
ADD BX,2
D2A:
MOV AX,[BX] ;读出二进制数放在AX中
CALL DEC2ASC ;调用转化和打印过程
MOV DL,' ' ;输出空格
MOV AH,2
INT 21H
ADD BX,2 ;后移
LOOP D2A
MOV DX,OFFSET NOTE1
MOV AH,9
INT 21H
MOV AX,GREATZ
CALL DEC2ASC
MOV DX,OFFSET NOTE2
MOV AH,9
INT 21H
MOV AX,ZERO1
CALL DEC2ASC
MOV DX,OFFSET NOTE3
MOV AH,9
INT 21H
MOV AX,LITTLEZ
CALL DEC2ASC
MOV AH,09H
LEA DX,MESS1
INT 21H
MOV AX,4C00H
MOV AH,09H
LEA DX,MESS2
INT 21H
MOV AX,4C00H
MOV AH,4CH
INT 21H
;===================================================================== ===
DEC2ASC PROC
PUSH BX ;保护
PUSH CX
LEA DI,OUT_STR ;将处理后的放入DI
MOV DX,DI
CMP AX,0
JNE NON_0
ZERO: MOV BYTE PTR[DI],'0' ;如果是0
MOV BYTE PTR[DI+1],'$'
JMP OUT_ASC
NON_0: TEST AX,8000H ;不是0
JZ PTIVE ;判断符号,是正号跳转
NTIVE: NEG AX ;取反
MOV BYTE PTR[DI],'-' ;置负号
JMP CON
PTIVE: MOV BYTE PTR[DI],'+' ;置正号
CON: INC DI
MOV DX,0
MOV CX,10000 ;万位
IDIV CX ;带符号数除法
ADD AL,30H
MOV byte ptr[DI],AL
MOV AX,DX
MOV DX,0
MOV CX,1000 ;千位
IDIV CX
ADD AL,30H ;加30H变成ASCII
MOV byte ptr[DI+1],AL ;写入
MOV AX,DX
MOV CL,100 ;百位
IDIV CL
ADD AL,30H
MOV byte ptr[DI+2],AL
MOV AL,AH
MOV AH,0
MOV CL,10 ;十位
IDIV CL
ADD AL,30H
MOV BYTE PTR[DI+3],AL
ADD AH,30H
MOV BYTE PTR[DI+4],AH ;个位
OUT_SIG:LEA DI,OUT_STR
MOV DL,BYTE PTR[DI]
MOV AH,2
INT 21H
INC DI
MOV DX,DI
B2: CMP BYTE PTR[DI],'0'
JNE OUT_ASC
INC DI
INC DX
JMP B2
OUT_ASC:MOV AH,09H ;打印
INT 21H
POP CX
POP BX
XOR AX,AX
RET
DEC2ASC ENDP
;====================================
CODE ENDS
END START
实验结果:。