微机原理汇编语言问题,哪位高手帮忙解决下?要求写出程序注释,并把源程序改为任意两个六位十进制相加。
发布网友
发布时间:2022-04-24 04:25
我来回答
共1个回答
热心网友
时间:2023-10-27 21:07
;整个程序实现data1和data2的相加
CRLF MACRO;宏定义回车换行
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT;data1和data2为加数和被加数
DATA1 DB 33H,39H,31H,37H,34H
DATA2 DB 36H,35H,30H,38H,32H
DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU LENGTH STA;把sta的长度给top
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
start: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2;把data2的偏移量给si
MOV BX,05;初始bx,输出五个字符
CALL DISPL;调用displ输出data2
CRLF;回车换行
MOV SI,OFFSET DATA1;把data1的偏移量给si
MOV BX,05;初始bx,输出五个字符
CALL DISPL;调用displ输出data1
CRLF;回车换行
MOV DI,OFFSET DATA2;把data2的偏移量给di
CALL ADDA;调用加法子程序,运算结果在data1中
MOV SI,OFFSET DATA1
MOV BX,05
CALL DISPL;输出结果
CRLF
MOV AX,4C00H
INT 21H
DISPL PROC NEAR;显示【si+bx-1中的内容】
DS1: MOV AH,02
MOV DL,[SI+BX-1]
INT 21H
DEC BX
JNZ DS1;循环5次
RET
DISPL ENDP
ADDA PROC NEAR;
MOV DX,SI;保存si
MOV BP,DI;保存di
MOV BX,05
AD1: SUB BYTE PTR [SI+BX-1],30H;把SI+BX-1字节中的asc||码还原成数字
SUB BYTE PTR [DI+BX-1],30H;把DI+BX-1字节中的asc||码还原成数字
DEC BX
JNZ AD1
MOV SI,DX;还原si
MOV DI,BP;还原si
MOV CX,05
CLC
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL;带进位加
AAA;调整al为非压缩的bcd码
MOV [SI],AL;保存结果
INC SI
INC DI
LOOP AD2
MOV SI,DX
MOV DI,BP
MOV BX,05
AD3: ADD BYTE PTR [SI+BX-1],30H;还原为asc||码
ADD BYTE PTR [DI+BX-1],30H;还原为asc||码
DEC BX
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START
修改后输六位的是下面的
;整个程序实现data1和data2的相加
CRLF MACRO;宏定义回车换行
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT;data1和data2为加数和被加数
DATA1 DB 6 p(?)
DATA2 DB 6 p(?)
data3 db ?
DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU LENGTH STA;把sta的长度给top
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
start: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2;把data2的偏移量给si
CALL shuru
CRLF;回车换行
MOV SI,OFFSET DATA1;把data1的偏移量给si
call shuru
CRLF;回车换行
MOV DI,OFFSET DATA2;把data2的偏移量给di
CALL ADDA;调用加法子程序,运算结果在data1中
mov ah,data3
sahf
mov dl,30h
adc dl,0
cmp dl,30h
jz a
mov ah,02h
int 21h
a: MOV SI,OFFSET DATA1
MOV BX,06
CALL DISPL;输出结果
CRLF
MOV AX,4C00H
INT 21H
DISPL PROC NEAR;显示【si+bx-1中的内容】
DS1: MOV AH,02
MOV DL,[SI+BX-1]
INT 21H
DEC BX
JNZ DS1;循环5次
RET
DISPL ENDP
ADDA PROC NEAR;
MOV DX,SI;保存si
MOV BP,DI;保存di
MOV BX,06
AD1: SUB BYTE PTR [SI+BX-1],30H;把SI+BX-1字节中的asc||码还原成数字
SUB BYTE PTR [DI+BX-1],30H;把DI+BX-1字节中的asc||码还原成数字
DEC BX
JNZ AD1
MOV SI,DX;还原si
MOV DI,BP;还原si
MOV CX,06
CLC
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL;带进位加
AAA;调整al为非压缩的bcd码
MOV [SI],AL;保存结果
INC SI
INC DI
LOOP AD2
lahf
mov data3,ah
MOV SI,DX
MOV DI,BP
MOV BX,06
AD3: ADD BYTE PTR [SI+BX-1],30H;还原为asc||码
ADD BYTE PTR [DI+BX-1],30H;还原为asc||码
DEC BX
JNZ AD3
RET
ADDA ENDP
shuru proc near
mov bx,6
sh1: mov ah,01h
int 21h
mov [si+bx-1],al
dec bx
cmp bx,0
jnz sh1
ret
shuru endp
CODE ENDS
END START
热心网友
时间:2023-10-27 21:08
;整个程序实现data1和data2的相加
CRLF MACRO;宏定义回车换行
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT;data1和data2为加数和被加数
DATA1 DB 33H,39H,31H,37H,34H
DATA2 DB 36H,35H,30H,38H,32H
DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU LENGTH STA;把sta的长度给top
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
start: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2;把data2的偏移量给si
MOV BX,05;初始bx,输出五个字符
CALL DISPL;调用displ输出data2
CRLF;回车换行
MOV SI,OFFSET DATA1;把data1的偏移量给si
MOV BX,05;初始bx,输出五个字符
CALL DISPL;调用displ输出data1
CRLF;回车换行
MOV DI,OFFSET DATA2;把data2的偏移量给di
CALL ADDA;调用加法子程序,运算结果在data1中
MOV SI,OFFSET DATA1
MOV BX,05
CALL DISPL;输出结果
CRLF
MOV AX,4C00H
INT 21H
DISPL PROC NEAR;显示【si+bx-1中的内容】
DS1: MOV AH,02
MOV DL,[SI+BX-1]
INT 21H
DEC BX
JNZ DS1;循环5次
RET
DISPL ENDP
ADDA PROC NEAR;
MOV DX,SI;保存si
MOV BP,DI;保存di
MOV BX,05
AD1: SUB BYTE PTR [SI+BX-1],30H;把SI+BX-1字节中的asc||码还原成数字
SUB BYTE PTR [DI+BX-1],30H;把DI+BX-1字节中的asc||码还原成数字
DEC BX
JNZ AD1
MOV SI,DX;还原si
MOV DI,BP;还原si
MOV CX,05
CLC
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL;带进位加
AAA;调整al为非压缩的bcd码
MOV [SI],AL;保存结果
INC SI
INC DI
LOOP AD2
MOV SI,DX
MOV DI,BP
MOV BX,05
AD3: ADD BYTE PTR [SI+BX-1],30H;还原为asc||码
ADD BYTE PTR [DI+BX-1],30H;还原为asc||码
DEC BX
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START
修改后输六位的是下面的
;整个程序实现data1和data2的相加
CRLF MACRO;宏定义回车换行
MOV DL,0DH
MOV AH,02H
INT 21H
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM
DATA SEGMENT;data1和data2为加数和被加数
DATA1 DB 6 p(?)
DATA2 DB 6 p(?)
data3 db ?
DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU LENGTH STA;把sta的长度给top
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
start: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
MOV SI,OFFSET DATA2;把data2的偏移量给si
CALL shuru
CRLF;回车换行
MOV SI,OFFSET DATA1;把data1的偏移量给si
call shuru
CRLF;回车换行
MOV DI,OFFSET DATA2;把data2的偏移量给di
CALL ADDA;调用加法子程序,运算结果在data1中
mov ah,data3
sahf
mov dl,30h
adc dl,0
cmp dl,30h
jz a
mov ah,02h
int 21h
a: MOV SI,OFFSET DATA1
MOV BX,06
CALL DISPL;输出结果
CRLF
MOV AX,4C00H
INT 21H
DISPL PROC NEAR;显示【si+bx-1中的内容】
DS1: MOV AH,02
MOV DL,[SI+BX-1]
INT 21H
DEC BX
JNZ DS1;循环5次
RET
DISPL ENDP
ADDA PROC NEAR;
MOV DX,SI;保存si
MOV BP,DI;保存di
MOV BX,06
AD1: SUB BYTE PTR [SI+BX-1],30H;把SI+BX-1字节中的asc||码还原成数字
SUB BYTE PTR [DI+BX-1],30H;把DI+BX-1字节中的asc||码还原成数字
DEC BX
JNZ AD1
MOV SI,DX;还原si
MOV DI,BP;还原si
MOV CX,06
CLC
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL;带进位加
AAA;调整al为非压缩的bcd码
MOV [SI],AL;保存结果
INC SI
INC DI
LOOP AD2
lahf
mov data3,ah
MOV SI,DX
MOV DI,BP
MOV BX,06
AD3: ADD BYTE PTR [SI+BX-1],30H;还原为asc||码
ADD BYTE PTR [DI+BX-1],30H;还原为asc||码
DEC BX
JNZ AD3
RET
ADDA ENDP
shuru proc near
mov bx,6
sh1: mov ah,01h
int 21h
mov [si+bx-1],al
dec bx
cmp bx,0
jnz sh1
ret
shuru endp
CODE ENDS
END START
问一道关于《微机原理与接口技术的题》的题,请高手帮忙解答下, 一个...
这个是我用c写的,程序查询方式。接线就是cs接地址译码,A0-A7接LED,B0-B7接开关。
求大佬解决一下这道微机原理题目,最好可以有注释
下列程序,即可满足题目要求:
请教高手,学习微机原理与接口技术时需要对汇编语言具体了解吗? 请你 ...
第一:了解一下数字电路是什么而不深入钻研。因为只有知道计算机最本质的构造才能对上层的机器码及汇编语言进行深入的体会。也只有这样才能明白计算机硬件接口的概念。第二:明白什么是硬件的接口(总线):就像高级语言中的接口一样,你不必关心它是怎么实现内部过程的,你只要知道接口提供了哪些功能,我们就...
请高手帮忙解决下有关微机原理的问题
14、8088系统中,一个I/O或存储器读写的基本总线周期包含 4 个状态。为了解决CPU和存储器或外设速度不匹配的问题,在CPU中设计了一条 READY 输入线。在存贮器或外设速度较慢时,要在 T3 状态后插入一个或几个 TW 状态周期。13、8088微机系统中,存贮器采用了分段技术,但在系统运行中,可直接识别...
...两个问题。请计算机专业的同志和编程高手来帮忙!感谢!
1:如果你能够熟练的使用Windows的话,你就可以开始你的程序生涯了!2:首先从C语言开始。有的朋友可能认为C语言太难了,应该从VB开始。虽然,对于一个初学者来说,用一些控件堆砌成一个小软件,是有一些成就感,但是,基础才是最重要的!C语言对于数据类型的描叙,远比VB里面说的更为全面,清楚,...
...还有那些语言?以及和嵌入式的关系? 希望高手帮忙
学习开发底层,你应该学习汇编语言,微机原理及接口技术,也就是说你要弄懂不同硬件相互通信的规则,以及如何利用规则通信。嵌入式操作系统主要是linux,开发环境因你用的语言不同而不同,如果你用汇编,即使记事本都可以,c语言用VC或其他。编写嵌入式操作系统,一般都是对linux进行修改,主要是看你用于...
编程是学些什么东西
4、添加注释 给自己的代码加注释,这是新手学习代码时最常用的方法,给自己的代码加注释,可以让编码者搞清楚每段代码所代表的含义,这样,即使在大程序中,我们也能熟记各个代码的含义。5、学习数学和逻辑 大多编程都涉及了基本的算术运算,但可能你想要学习更先进的概念,写出复杂的模拟或者算法级别程序...
小白看过来,新人如何入门嵌入式
1. 通读<linux内核完全注释>,请看薄的那本(浮燥的社会讲求速度, 呵), 2. 选读<Linux内核情景分析>, 想了解哪一块就读哪一节 三、驱动: 驱动包含两部分:硬件本身的操作、驱动程序的框架。 又是硬件,还是要看得懂原理图、读得懂芯片手册,多练吧。 说到驱动框架,有一些书介绍一下。LDD3,即<Linux设备驱动...
形象通俗地讲讲电脑计算1+1的过程?
然后再表现出来.这就是时序逻辑电路的基本原理.通俗来说,也就好象我们可以通过语言来交流一样,比如我知道这个绳子上有几个结来告诉另一个人让另一个知道.当然中间有转化过程,就是我们大脑,来处理这些问题,我看到三个结然后,由眼睛传达到大脑,大脑记录下来,遇到另一个人的时候,经过编译,处理转化为语言...
嵌入式系统的概念
硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。 2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它...