如何用汇编语言编程,在一百个数中找一个最大负偶数?
汇编程序如下:
Zero EQU 42H ;零的统计
Negetive EQU 41H ;负数的统计
Positive EQU 40H ;正数的统计
Count EQU 100 ;比较个数
ORG 0000H
LJMP MAIN
ORG 0040H
Data_Filter:
PUSH PSW ;函数调用时的现场保护
PUSH ACC
MOV Zero,#0
MOV Negetive,#0
MOV Positive,#0
MOV R2,#0
MOV DPTR,#0x2000
Loop:
MOVX A,@DPTR
CJNE A,#0,NonZero
INC Zero
JMP NEXT
NonZero:
JC Neg
INC Positive
JMP NEXT
Neg:
INC Negetive
NEXT:
INC DPTR
INC R2
CJNE R2,#Count,Loop
POP ACC ;恢复现场
POP PSW
RET
MAIN:
ACALL Data_Filter
SJMP $ ;仅用于测试观察
END
如果ACC.0=1则是奇数,如果ACC.0=0就是偶数。
首先判断这个数是不是负偶数,若是,存到一个寄存器MAX中。判断下一个数是不是负偶数,若是,比较它与MAX的大小,若比MAX大,存到MAX中。
指向下一个数,判断是不是负偶数,若是,比较它与MAX的大小,若比MAX大,存到MAX中。
。。。
循环,直到计数到达100,比较完毕,寻找最大负偶数子函数结束。
.8086
.MODEL SMALL
.DATA
buf db 255 dup(?)
.STACK
.CODE
START:
MOV AX,0ffffh
MOV DS,AX
MOV SI,0
MOV CX,100
XOR AX,AX
@REP:
MOV AL,[SI]
TEST AL,80H ;;TEST符号位
JZ @NEXT ;;为0则是正数,则跳
TEST AL,1 ;;偶数末位为0,奇数末位为1
JNZ @NEXT ;;为1则跳
CMP AH,[SI]
JAE @NEXT ;;AH是最大数,则跳
MOV AH,AL
@NEXT:
INC SI
LOOP @REP
MOV AH,4CH
INT 21H
END START
什么是汇编语言
用汇编语言写出的程序是汇编语言源程序,机器无法执行。必须用计算机配置好的汇编程序把它翻译成机器语言目标程序,机器才能执行。这个翻译过程就是汇编过程。汇编语言比机器语言在编写、修改、阅读方面均有很大改进,运行速度也快,但掌握起来比较困难。 汇编语言的特点 汇编语言采用了助记符来编写程序,比用...
8086———汇编语言程序代码———数据查找?
通过键盘输入数据个数、所有数据和待查找的某个数据(屏幕上要有相关文字提示,如“please input data number,please input data等”),数据的形式为十进制,转换为补码后,存入对应变量中,如果待查找的数据存在于数据序列中,将数据在序列中的序号存入NO变量中,如果数据不存在,将0FFH存入NO变量中,并在屏幕上输出显示查找...
菜鸟求助高手 汇编语言编程序 1+2+3+...+100=?
程序如下:code segment assume cs:code,ds:code start:mov ax,data mov ds,ax xor ax,ax ;给ax赋初值 mov cx,100 lop:add ax,cx; 最终的结果就在AX中 loop lop ;循环 mov ah,4ch int 21h code ends end start
汇编语言:在内存定义一组给定个数的无符号数,试编程寻找其中的最大值...
;找出最大值并显示 ;思路:先按升序排序,则最后一个元素就是最大值,然后转换为十进制输出,此时若想找到最小值第一个元素即是 data segment a dw -1,2,100,-100,99,120,15,46,411,102 mes db 'the max:$'data ends code segment main proc far assume cs:code,ds:data start:push ds...
用汇编语言编写“一个数中有几个1几个0”的程序。
; 功能:键盘输入一个指定位数的十进制数字,将其转换成二进制数并保存在指定的内存单元。; 入口:@@Digits=数字位数;di=保存输入的数字地址 ; @@Type_Data=保存的数据类型,B=字节类型,W=字类型。; 出口:转换后的二进制数保存在di所指的单元 Input_Digit Proc Near push dx push cx push...
在内存地址为BUFF开始的单元存放有100个字节的带符号数。编一程序求其...
CODE SEGMENT ASSUME CS:CODE BUF DB 100 DUP(?) ; 这100个数 你自己设定 N EQU $-BUF X DB 0 Z DW 0 Y DW 0 START: PUSH CS ; 设定 ds、es 与 cs相同 POP DS PUSH CS ...
用汇编语言求100以内质数的和
Primes DW 0 ;能够整除该和的质数的个数 Begin: lea di,PrimeNum ; 质数数列首地址 mov cx,100 PrimeSum: push cx pop ax call Estimation ;判断质数子程序 jnc NextNumber stosb ;把质数保存在质数数列里 add Prime_Sum,ax NextNumber:loop PrimeSum push di pop cx lea...
试编制一个汇编语言程序,求出首地址为data的100dh字数组中的最小偶数...
假设数组存放的是无符号数 MOV SI,0 MOV BX,65534 MOV CX,100DH LOOP1:MOV AX,data[SI]TEST AX,1 JNZ NEXT CMP AX,BX JNB NEXT MOV BX,AX NEXT:INC SI LOOP LOOP1 最小偶数存放在BX中
用汇编语言编写若干个无符号数中的最大值和最小值
调试已通过,解题思路:首先对10个数按从小到大排序,然后第一个元素就是最小的,最后一个元素就是最大的 data segment mes1 db 'the max:$'mes2 db 'the min:$'a dw 42,20,100,456,99,120,89,12334,90,1239 data ends code segment main proc far assume cs:code,ds:data start:push...
用汇编语言编程实现输出任意10个数中的最大数最小数
8086汇编:假设该数组存放在BUF开始的内存单元中,个数N,AH中存放最大数,AL中存放最小数 MOV CX,N LEA DI,BUF MOV AL,0 MOV AH,0 L1: CMP [DI],AH JB MIN MOV AH,[DI]JMP NEXT MIN: CMP [DI],AL JAE NEXT MOV AL,[DI]NEXT:INC DI LOOP L1 ...