如何用汇编语言(8086)实现这2个简单程序?
如果汇编语言自己调用就用个call 就行了,给你举个例子:在运行到需要调用的时候这样用:
call crlf //这里调用crlf这个子程序
crlf proc near //这里写名为crlf的子程序
//子程序代码
ret
crlf endp
assume cs:csegcseg segment hextab db '0123456789ABCDEF' A dd 11118888H b dd 33339444H c dd 0start: mov ax, cseg mov ds, ax mov ax, word ptr a add ax, word ptr b mov word ptr c, ax mov ax, word ptr a+2 adc ax, word ptr b+2 mov word ptr c+2, ax ;16进制显示结果 lea bx, hextab mov ah, 0eh ;高16位 mov dx, word ptr c+2 mov cx, 404hc1: rol dx, cl mov al, dl and al, 0fh xlat int 10h dec ch jnz c1 ;低16位 mov dx, word ptr c mov cx, 404hc2: rol dx, cl mov al, dl and al, 0fh xlat int 10h dec ch jnz c2 mov ah,4ch int 21hcseg endsend start
1。 在内存BUFF单元中定义有10个16位数,试寻找其中的最大、最小值并分别放到指定的单元MAX和MIN中。SSEG SEGMENT STACK
STK DB 20 DUP(?)
SSEG ENDS
DSEG SEGMENT
BUFF DW -5,56,45,-96,5,2,457,8,7,-8
MAX DW ?
MIN DW ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START: MOV AX,DSEG
MOV DS,AX
LEA BX,BUFF
MOV CX,10
MOV AX,[BX]
MOV MIN,AX
MOV MAX,AX
INC BX
DEC CX
AGAIN: MOV AX,[BX]
CMP AX,MIN
JE NEXT
JA A1
MOV MIN,AX
JMP NEXT
A1: CMP AX,MAX
JB NEXT
MOV MAX,AX
NEXT: INC BX
DEC CX
JNZ AGAIN
MOV AH,4CH
INT 21H
CSEG ENDS
END START
2。在BUFF开始的存储区中存放30个带符号数,试统计起正数、负数、零的个数,并将个数分别放到A1、A2、A3单元中。
SSEG SEGMENT STACK
STK DB 20 DUP(?)
SSEG ENDS
DSEG SEGMENT
BUFF DB ………………;省略掉
A1 DB ? ;正数
A2 DB ? ;负数
A3 DB ? ;零;
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START: MOV AX,DSEG
MOV DS,AX
LEA BX,BUFF
MOV DI,30
MOV CX,0
MOV DL,0
L1: MOV AL,[BX]
CMP AL,0
JE L2
JG L3
INC CL
JMP NEXT
L2: INC DL
JMP NEXT
L3: INC CH
NEXT: INC BX
DEC DI
JNZ L1
MOV A1,CH
MOV A2,CL
MOV A3,DL
MOV AH,4CH
INT 21H
CSEG ENDS
END START
如何用汇编语言(8086)实现这2个简单程序?
1。 在内存BUFF单元中定义有10个16位数,试寻找其中的最大、最小值并分别放到指定的单元MAX和MIN中。SSEG SEGMENT STACK STK DB 20 DUP(?)SSEG ENDS DSEG SEGMENT BUFF DW -5,56,45,-96,5,2,457,8,7,-8 MAX DW ?MIN DW ?DSEG ENDS CSEG SEGMENT ASSU...
用8086的汇编语言做一个完成两个十进制2位数之间的加减乘除运算的程序...
数据段里可以设置三个变量分别存放两个十进制数和运算符,然后程序读入你输入的式子,把对应的数据存起来,转换好,因为控制台输入的式子会转化成ascii码的形式。然后运算完得到结果再转化一次成ascii码的值输出
汇编语言8086实现两个多精度数的相加和相减
计算机是用二进制表示数的,存储的位长有限,只能截掉,所以误差就产生了。比如 十进制(0.1)=二进制(0.0001100110011...)在一些要求四舍五入严格精度的场合,最好把浮点数转换为 整数来计算。
用汇编语言8086CPU的指令实现两个32位无符号数乘法程序
; x86汇编如下,仅考虑结果不超过32位的情况:; D1和D2是2个乘数,D3为结果。data segmentD1 DD 123hD2 DD 14567hD3 DD ?data endscode segment assume cs:code, ds:datastart:mov ax,data mov ds,axmov ax, word ptr D1mov cx, word ptr D2mul cxmov word ptr D3, axmov word ...
用8086汇编语言实现两个无符号32位二进制数相加,并显示结果。注:输入...
; 相加的两个数以及其和不得超过6.5亿,否则出现除法溢出; 输入的两个数存入数组x 中 (输入时,两个数以空格间隔,以回车结束输入); 相加的结果存入y 中,或dx、ax中code segment assume cs:code org 100hSTART: JMP BBBX DD 10 dup(?)num dw ?Y DD ?cc db ...
编写汇编语言程序,用8086指令实现两个32位无符号数相加
assume cs:csegcseg segment hextab db '0123456789ABCDEF' A dd 11118888H b dd 33339444H c dd 0start: mov ax, cseg mov ds, ax mov ax, word ptr a add ax, word ptr b mov word ptr c, ax mov ax, word ptr a+2 adc ax, word ptr b+2 mov word ptr ...
用8086的汇编语言做一个完成两个十进制2位数之间的加减乘除运算的程序...
在数据库OPEN阶段,Oracle会尝试打开并锁定数据文件,如果丢失或出现问题,则会给出错误提示,可以mount数据库然后做介质恢复。SQL> startup mount;SQL> recover database until cancel;SQL> alter database open resetlogs;
汇编语言中为什么要用8086的cpu进行讲解
在汇编语言下常提到“80x86指令集”这个术语,意思是兼容这些cpu的指令集。编语言是针对微处理器(即CPU)的,不同的微处理器其汇编语言是不同的,如INTEL8088\/8086,8051\/8031,Z80等...,C语言相对汇编语言是高级语言,你想做黑客,要学C,就从8088\/8086汇编开始吧.顺便说一下,你不可能掌握所有汇编,既...
汇编语言,TSET AL,01H (换行) JZ N 这两条指令的实现过程,什么是为零跳...
TEST指令是将源操作数与目的操作数作按位与运算,但不改变目的操作数,也即按位与结果只影响标志位,目的操作数不变。处理器中都会有一个标志寄存器,在8086中叫程序状态字寄存器PSW,PSW寄存器中有一个ZF位,当一条指令运算结果为0时,ZF位置位(1),否则清0(0)。JZ N指令是当PSW寄存器的ZF为...
编一个给小学生出两位数乘法运算题程序;用汇编语言编写,急需……_百 ...
程序采用汇编语言编写,使用8086架构。程序运行流程如下:1. 显示提示,要求输入第一个数,等待用户输入。2. 显示提示,要求输入第二个数,等待用户输入。3. 对输入的数进行处理,计算乘积。4. 显示计算结果。程序中包含输入处理逻辑,能够验证用户输入的合法性。如果输入错误,程序会提示用户重新输入。