汇编语言程序出现divide error,求改正
可能是余数没有清零的问题,在进行除法操作之前默认的余数寄存器要先清零的。
如果是做16位的除法,在div指令前加一句sub ah,ah试试。。。。。
DATAS SEGMENT
DAT1 DB 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22
AA DB ?, ?, '$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
LEA SI, DAT1
MOV CX, 19
MOV DX, 0
MOV DL, [SI]
ADC DH, 0
N1: INC SI
ADD DL, [SI]
ADC DH, 0
LOOP N1
MOV AX, DX
MOV BL, 20
DIV BL
MOV AH, 0
MOV BL, 10
DIV BL
ADD AL, 30H
ADD AH, 30H
LEA BX, AA
MOV [BX], AL
MOV [BX + 1], AH
LEA DX, AA
MOV AH, 09H
INT 21H
MOV AH, 4CH
INT 21H
CODES ENDS
END START
;从键盘输入一个十进制数num(70~99),
;从键盘输入一位数i,
;以十进制形式输出小于num且能被i+1整除的所有数。
DATAS SEGMENT
S DB 3, ?, 3 DUP(?)
INPUT DB 0AH, 0DH, 'INPUT NUM: $'
INPUT2 DB 0AH, 0DH, 'INPUT SNO: $'
OUTPUT DB 0AH, 0DH, 'NUMBER IS: $'
ER DB 0AH, 0DH, 'INPUT ERROR. $'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES, DS:DATAS
START:
MOV AX, DATAS
MOV DS, AX
SHURU:
LEA DX, INPUT
MOV AH, 9
INT 21H
LEA DX, S
MOV AH, 10
INT 21H
;-----------------------------
MOV AX, 0
LEA BX, S + 2
CWPC:
CMP BYTE PTR [BX], 0DH
JE CWPC2
CMP BYTE PTR [BX], '0'
JB ERROR
CMP BYTE PTR [BX], '9'
JA ERROR
MOV CX, 10
MUL CX
MOV CX, 0
MOV CL, [BX]
SUB CL, '0'
ADD AX, CX
INC BX
JMP CWPC
;-----------------------------
CWPC2:
MOV CX, AX ;number
DEC CX ;小于
LEA DX, INPUT2
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
CMP AL, '0'
JB ERROR
CMP AL, '9'
JA ERROR
SUB AL, '0'
INC AL
MOV BL, AL ;i+1
;-----------------------------
LEA DX, OUTPUT
MOV AH, 9
INT 21H
QUYU:
MOV AX, CX
DIV BL
CMP AH, 0
JNE NEXT
SHUCHU:
MOV AX, CX
AAM
MOV DL, AH
MOV DH, AL
OR DX, 3030H
MOV AH, 02H
INT 21H
MOV DL, DH
INT 21H
MOV DL, 20H
INT 21H
NEXT:
LOOP QUYU
JMP EXIT
;-----------------------------
ERROR:
LEA DX, ER
MOV AH, 9
INT 21H
EXIT:
MOV AH, 4CH
INT 21H
CODES ENDS
END START
编写一个汇编语言程序,它先接受一个字符串然后显示其中数字字符的个数...
INSTR0 BB1: MOV AH,1 INT 21H CMP AL,13 JE NEXT1 MOV [DI],AL INC WORD PTR[INNUM] INC DI JMP BB1 NEXT1: LEA SI,INSTR0 MOV
汇编语言程序设计:作业
1.20H占一个内存单元,[bx]占两个内存单元,即两字节,不能相加,内存单元大小不同 2.[cx]不能用来表示内存单元,只有bx,si,bp可以用来表示内存单元,且内存单元大小不同 3.al是八位寄存器,bx是16位寄存器,不能相加,内存单元不同不能相加 4.di不能表示内存单元,只有bx,si,bp三个寄存器可以...
DI是什么意思?
女生的di意思是“目的地想象”,是一项国际性的培养青少年创造力的活动。DI协会成立于1983年,总部设在美国的新泽西州,并于每年5月份在美国举办DI全球总决赛。所谓DI,就是头脑奥林匹克(Drillinstructor)的意思,是由美国引进的,主要是开发青少年的智力。DI要求所有参与竞赛的团队需用创意完成两种不同...
《汇编语言程序设计》复习题答案求救,分析题!高分,谢谢!
41答案如下:SI是源地址寄存器,DI是目的地址寄存器,就是以源地址寄存器[SI]开始的64H个字节里面的内容,复制到以[DI]为始址的空间中去。CX是计数器嘛,就是复制64H个字节的内容,MOVSB就是MOV 以 B为单位!42答案如下:DATA SEGMENT A DW 0 B DW 0 C DW 15H,5H,50H DATA ENDS CODE ...
为什么在python中是ioc \/ di不常见
1. 其实我不认为直接投资\/ IoC是在Python。什么是却是直接投资\/ IoC。想想看:什么是一个DI容器呢?它可以让你 连线连成应用程序...在 我们有“接线合”及“脚本 动态 所以,一个DI容器不过是一个解释的动态脚本语言。实际上,另一种方式是:一个典型的Java \/ .NET的DI容器不过是一个蹩脚的解释...
用C++语言编写程序(不是C):输入一个正整数a,以及另外5个正整数,输出后...
include <iostream> using namespace std;int main (){ int a;cout<<"请输入正整数a"<<endl;cin>>a;int x,s=0;cout<<"请输入另外5个正整数"<<endl;for (int i=1;i<=5;i++){ cin>>x;if (x< a)s += x;} cout<<"5个整数中那些小于a的整数的和是"<<s<<endl;return 0;...
【微机原理】1.汇编语言程序设计(1)
代码示例: 在DATA SEGMENT中,我们假设A=3, B=4,程序开始执行:首先,设置数据段地址到DS(MOV DS, AX)通过LEA SI, A,SI指向A的地址读取A的值(MOV AX, [SI]; INC SI)接着读取B的值(MOV BX, [SI]; INC SI)执行加法并存储结果到内存(ADD BX, AX; MOV [DI=memory location of ...
用汇编语言编写程序,将一串凌乱的字母按从小到大的顺序排列,并将排好...
DATAS SEGMENT DATA DB 'bcda$';此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX MOV SI,1 LOP1:MOV DI,SI INC DI MOV AL,DATA[SI-1]LOP2:CMP AL,DATA[DI-1...
用汇编语言编写字符串查找的程序,怎样编?急用!谢谢啦!
MOV DI,OFFSET输入输出DI指向输出字符串 MOV AH,01 INT 21H 输入的字符你要删除,存放在AL LOOP1:MOV AH,[BX]CMP AH,AL比较字符串的字符是否要删除字符相同 JE NO_COPY相同,执行删除 MOV [DI],AH不同的复制到输出字符串的字符 INC DI指针DI加 NO_COPY的:INC BX的字符发送到输出字符串...
汇编语言程序设计提问
3. inc的操作数应是一个寄存器或内存单元,执行结果是将其内容加1 4.不能直接把立即数传送到段寄存器中,可以改为 mov ax,2000H mov dx,ax 5.add的源操作数不能是段寄存器,只能是通用寄存器、立即数或存储器 6.寄存器间接寻址的寄存器只能使用BX、BP(基址) 和SI、 DI(变址),即不能不...
班泻可尼: 32位程序的话可以调用msvcrt.dll里的C函数,16位的话可以用mov ah, 1int 21h来接受一个键盘响应或者直接用控制台启动程序就可以了...
宁乡县13286593342: 汇编语言写的程序运行时出现“divide overflow" - ?
班泻可尼: CWD的功能是将AX中的字扩展成双字存入DX和AX中 你再将mov dl,2然后div dx,表示用DX和AX中的双字除以DX,这样就存在被除数的DX被除数的DX改变了,所以结果就会出错; div dl表示用AX的值除以DL,不存在矛盾. 但你显示的结果...
宁乡县13286593342: 汇编语言中运行程序时出现divide overflow是怎么回事? - ?
班泻可尼: 除法溢出错误,一般是由于0做了除数.
宁乡县13286593342: C语言程序编辑好后,电脑没有检查出错误,但是运行时结果输出显示为“Divide error”.?
班泻可尼: 类似这种错误语法上是没问题的,总是在运行中.你应该记住出错误的条件(比如输入某个数进行计算时),然后在IDE中,在程序源代码的适当位置设置断点,再一步一步进行调试.通常可能是出现了除数为零的情况. 查出问题后就可以着手解决了.以我的经验,解决有两种方法(其他高手如有更好的方法,欢迎赐教),一是在每一次浮点运算时都进行检查(分母是否为0,对数的真数是否小于或等于0,根号下的数字是否小于0等等),出现后就给出一个错误提示,不要再执行了.过去我在DOS下就是这么办的.现在好一些,可以用异常机制进行处理(如果你的编译器支持异常的话).
宁乡县13286593342: 汇编程序出错 divide overflow - ?
班泻可尼: 如果没记错的话,你这错误提示是除法溢出 除法只能是16位除8位,或32位除16位 而你这是16位除16位 MOV AX,[BX] MOV BX,100 DIV BX ;AX除数 当然会溢出报错
宁乡县13286593342: 汇编出现Divide overflow - ?
班泻可尼: 那是除法溢出的意思,我不想看你的程序,但是,原因多半是: 由于DX,AX作为被除数的高位低位,除法之后,DX作为余数,AX作为商,考虑这样的情况: DX = 1111H AX = 1111H 除以 CX = 1H 当然商是1111 1111H,余数是0 但是DX显然无法装下1111 1111H 所以是除法溢出. 还有一种可能是除数是0.
宁乡县13286593342: c语言divide error的意思.?
班泻可尼: 头文件包含写漏了,w请定义为float或者使用强制类型转换.按你的思路s应该初始话为0.
宁乡县13286593342: 在C语言中Divide error是什么意思? - ?
班泻可尼: 在C语言中的除法运算中,如果除数为0,就会出现Divide error.取模(%)运算中的除数和被除数不全为整型时也会出现错误.你可以仔细检查一下源程序,看是否是以上的问题.
宁乡县13286593342: 运行C语言程序时显示“divide error”????
班泻可尼: 原来求最大公约数的地方错了,gcd=n改成gcd=m; 另外输出的时候使用x y代替m n,因为这个m n已经不是原来输入得了.而x y保存了原来的m n. #include <stdio.h> int main(void) { int gcd,/*?*/ lcm, m, n,t,x,y; int repeat, ri; scanf("%d", &...
宁乡县13286593342: 汇编程序出现divideoverflow错误?
班泻可尼: 应该对你有帮助的!除法溢出的错误提示.自己看看你的除法运算语句div相关的,以及商和余数的存储器里存的是什么