微机原理编写完整汇编程序,将内存中10个有符号数求和,结果放入SUM单元(类型DW)。有符号数类型DB.

微机原理编写完整汇编程序,将内存中10个有符号数求和,结果放入SUM单元(类型DW)。有符号数类型DB.,第1张

DATA SEGMENT

TABLE1 DB 0FFH,0FFH,0FFH,0FFH,0FFH

DB 0FFH,0FFH,0FFH,0FFH,0FFH ;这个你自己改吧。

SUM DW

ASCC DB 10 DUP (20h) ,'$'

COUNT DW 10

DATA ENDS

;

CODE SEGMENT

ASSUME CS:CODE ,DS:DATA,ES:DATA

START: MOV AX,DATA

MOV DS,AX

MOV ES,AX

LEA SI,TABLE1

MOV CX,10

XOR AX,AX

XOR BX,BX

CBW

NEXT: MOV AL,[SI]

CBW

ADD BX,AX

INC SI

LOOP NEXT

MOV SUM,BX

;以下是显示部分

LEA SI,sum

MOV BX,10 ;除数

LEA DI,ASCC+9 ;放入要转换的数

MOV AX,[SI]

AGAIN: XOR DX,DX

AND Ax,AX

JNS NEXT4

NEG AX

NEXT4: DIV BX

ADD DL,30H

MOV [DI],DL

XOR DX,DX

DEC DI

INC COUNT

AND AX,AX

JZ NEXT5

JMP NEXT4

NEXT5:

MOV AX,[SI]

CMP AX,8000H

JNC NEXT6

MOV AL,2BH

MOV [DI],AL

JMP NEXT7

NEXT6: MOV AL,'-'

MOV [DI],AL

NEXT7: LEA DX,ASCC

MOV AH,09H

INT 21H

MOV AH,4CH

INT 21H

CODE ENDS

END START

没有什么难点,主要是比较费工夫。汇编语言可读性非常差,一般情况别人只可能指导思路,不可能代替,别人写出来的东西你自己看也费劲,而且什么都学不到。

我提点一下你吧,第一题如果让我做,我会先写一系列的子函数或者宏,然后依次调用完成整个工作:1、int 21h的键盘输入

2、int 21h的屏显

3、判断是否为大写字母(asc2码是否在41h到5ah的范围)

4、判断是否为小写字母(asc2码是否在61h到7ah的范围)

5、判断是否为回车

6、转换字母的asc2码为数字

主函数:开辟一个262的一系列存储单元,假如首地址为XXH,初值都为0。

调用1 存在某个地址[A]内。

依次调用3 4 5,若

3成立,调用6把大写字母的asc2码提取为B,执行XXH+B-41h内存储的数+1。

4成立,调用6把大写字母的asc2码提取为B,执行XXH+B-61h+26内存储的数+1。

5成立,开始输出:计数器i从0到26,每次循环执行调用2输出'41h+i'(大写字母A到Z)和调用2输出XXH+i内的内容。循环结束再自0起循环26次,每次循环执行调用2输出'61h+i'和XXH+26+i内的内容。

程序框图可以根据我的叙述你自己画出来,然后程序可以查指令表慢慢编写。如果能接受这种回答方式的话请追问我们做进一步交流,细节上也可以讨论,不能接受的话就算了。

以前做的实验 可以参考下有一个10个字节的有符号数组,编程实验使该数组的元素按照从小到大的次序排列。data segment ;定义数据段data1 db 32h,02h,01h,04h,0f1h,0f2h,0ffh,0fdh,0fah,79hcount equ $-data1data ends code segment assume:ds:data,cs:codestart: mov ax,data mov ds,ax mov si,offset data1 ;指向序列首地址 mov bx,si ;把序列首地址给bx mov dx,count-1 ;外循环计数器outside:mov cx,dx ;内循环计数器 push si ;此循环处理的第一个单元地址 mov al,[si]inside: inc si cmp al,[si] jl nexchg ;若低于,则处理下一个 xchg [si],al ;若高于,则交换比较的两个单元nexchg: loop inside ;完成内部循环,继续 pop si mov [si],al inc si dec dx jnz outside ;未完成外部循环,继续code endsend start微机原理 数据排序实验

MOV CX,2 ;循环两次

LOP:SHL AX,1 ;第一次:AX左移一位,AX=1111111111111110B,CF=1

;第二次:AX左移一位,AX=1111111111111100B,CF=1

RCL DX,1 ;第一次:DX带进位循环左移一位,DX=0000000000000011B

;第二次:DX带进位循环左移一位,DX=0000000000000111B

LOOP LOP

所以,上述程序段执行后,DX=0007H, AX=0FFFCH

以上就是关于微机原理编写完整汇编程序,将内存中10个有符号数求和,结果放入SUM单元(类型DW)。有符号数类型DB.全部的内容,包括:微机原理编写完整汇编程序,将内存中10个有符号数求和,结果放入SUM单元(类型DW)。有符号数类型DB.、微机原理实验双色点阵显示“开”字程序代码、微机原理 数据排序实验等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9294531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存