汇编语言编写一个简单的程序(我学的是汇编语言与接口技术)

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-17
简单题微机原理与接口技术,汇编语言,用汇编程序写这个函数,高分求答案

data segment BUFFER db -7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,0 ;x的取值 BUFFER_Y db ($-buffer) dup(0) ;计算存放y的值 BUFFER_Len dw equ $- BUFFER_Y ;数据长度data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov si,offset BUFFER ;指向x 以取值 mov di,offset BUFFER_Y ;指向y 以保存结果 mov cx,BUFFER_Len s: mov al,[si] ;取到一个x值 test al,80h ;测试最高位是0还是1,即正负 jz s0 ;如果等零:表示是正数及零 mov byte ptr[di],-1 ;负数Y=-1 ,十六进制表示是HH jmp next s0: cmp al,0 ;比较数据是否等于0 jz s1 mov byte ptr[di],1 ;如果x为正数,y=1 jmp next s1: mov byte ptr[di],0 ;如果x=0,则y=0 next: inc si ;指向下一个x的地址 inc di ;指向下一个y的地址 loop s ;循环处理每一个x值 mov ah,4ch int 21hcode endsend start


我只能给你整数的解了, 浮点数汇编好像有点麻烦,也没有研究的必要, 所以没考虑, 看有没有其它网友给您浮点数的解.................

这个程序很复杂,这个问题学会了,汇编语言也就基本过关了。下面给出输入和原始顺序分数输出,重点说明结构数据的使用,供参考: STUD STRUC NO DB 10,?,10 DUP(?) XM DB 20,?,20 DUP(?) CJ DB 6,?,6 DUP(?) SCORE DW ? STUD_LEN EQU $-NO STUD ENDS DATA SEGMENT STUDS STUD 100 dup() NUM DW 0 NOMSG DB 13,10,13,10,'please input the number of student: $' XMMSG DB 13,10,'please input the name of student: $' CJMSG DB 13,10,'please input the score of student: $' CONTMSG DB 13,10,13,10,'Are you want to continue(y/n)? $' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,SEG DATA MOV DS,AX MOV ES,AX LEA DI,STUDS @0: LEA DX,NOMSG MOV AH,9 INT 21H LEA DX,[DI].NO MOV AH,0AH INT 21H LEA DX,XMMSG MOV AH,9 INT 21H LEA DX,[DI].XM MOV AH,10 INT 21H LEA DX,CJMSG MOV AH,9 INT 21H LEA DX,[DI].CJ MOV AH,10 INT 21H ; 以下计算score MOV WORD PTR [DI].SCORE,0 LEA SI,[DI].CJ MOV CL,[SI+1] MOV CH,0 @@CJ: MOV AX,[DI].SCORE MOV BX,10 MUL BX MOV DX,AX MOV AL,[SI+2] SUB AL,30H MOV AH,0 ADD AX,DX MOV [DI].SCORE,AX INC SI LOOP @@CJ INC WORD PTR NUM ADD DI,STUD_LEN LEA DX,CONTMSG MOV AH,9 INT 21H MOV AH,1 INT 21H CMP AL,'n' JE @2 JMP @0 @2: MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H MOV CX,NUM LEA DI,STUDS @@OUT: MOV AX,[DI].SCORE CALL DISPAX ADD DI,STUD_LEN LOOP @@OUT @EXIT: MOV AH,4CH INT 21H;============================================== DISPAX PROC NEAR PUSH BX PUSH CX PUSH DX PUSH SI PUSH DS PUSH AX MOV AH,2 MOV DL,' ' INT 21H POP AX PUSH CS POP DS MOV BYTE PTR NZ,0 PUSH AX LEA SI,DIVARR MOV CX,5 @@1: POP AX MOV DX,0 MOV BX,[SI] DIV BX PUSH DX CMP AL,0 JNE @@2 CMP BYTE PTR NZ,1 JE @@2 CMP CX,1 JE @@2 MOV DL,20H JMP @@3 @@2: ADD AL,30H MOV DL,AL MOV BYTE PTR NZ,1 @@3: MOV AH,2 INT 21H INC SI INC SI LOOP @@1 POP DX POP DS POP SI POP DX POP CX POP BX RET DIVARR DW 10000,1000,100,10,1 NZ DB 0 DISPAX ENDP;=============================================== CODE ENDS END START 建议编制这些子程序:串结构数组排序子程序、串结构数据交换子程序

;请从键盘任意输入一个0-59内的数,每隔一秒自加一,当加到59后跳到0从新开始自加
DATAS SEGMENT
;此处输入数据段代码
MESS0 DB 'Error char!','$' ;异常信息
MESS1 DB 'Input overflow!','$'
MESS2 DB 'Must be 0~59!','$'
SEPRA DB 0DH,0AH,'$' ;分隔符
TIME DB 0
MADDR DW OFFSET MESS0,OFFSET MESS1,OFFSET MESS2 ;异常信息地址
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
DW 64 DUP (?)
TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
;异常处理
L0:
MOV AH,9

LEA DX,SEPRA
INT 21H

ADD SI,SI
MOV DX,MADDR[SI]
INT 21H

LEA DX,SEPRA
INT 21H
INT 21H

XOR BX,BX
JMP SHORT L1 ;重新输入

START:
MOV AX,DATAS
MOV DS,AX
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP
;此处输入代码段代码

MOV BH,10 ;进制数
MOV DI,60 ;模数
XOR BL,BL
L1:
MOV AH,1
INT 21H

CMP AL,' '
JE EXIT ;输入空格符,则程序结束

CMP AL,0DH
JE L2 ;输入回车符,则数字输入结束

MOV SI,0
CMP AL,'0'
JB L0
CMP AL,'9'
JA L0

MOV SI,1
AND AL,0FH
XCHG AL,BL
MUL BH
JC L0 ;乘法溢出,数字大于255
ADD BL,AL
JC L0 ;加法溢出,数字大于255
JMP SHORT L1

L2:
MOV SI,2
CMP BL,59
JA L0 ;输入数字大于59

L3:
;取系统时间
MOV AH,2CH
L4: INT 21H
CMP TIME,DH
JE L4
MOV TIME,DH ;如果系统时间更改了,就进行输出

;输出数字
MOV AL,BL
CBW ;AL扩展为AX
CALL SHOWCHAR

;输出分隔符
LEA DX,SEPRA
MOV AH,9
INT 21H

;数字自加1
INC BL

;数字对60取模
MOV AL,BL
CBW
CWD
DIV DI ;(DI)=60
MOV BL,DL

;延时1秒
;CALL DELAY

;判断是否有键盘输入,如果有,则程序结束
MOV AH,6
MOV DL,0FFH
INT 21H
JZ L3

EXIT:
MOV AH,4CH
INT 21H
MAIN ENDP

;传入参数:AL,一个无符号整数;BH,作为全局变量始终为10
;返回参数:无
;功能:显示AX对应的十进制数
SHOWCHAR PROC NEAR
PUSH DX
PUSH CX

XOR CX,CX ;记录十进制位数
L6:
XOR AH,AH
DIV BH
MOV DL,AH
XOR DH,DH
ADD DX,30H
PUSH DX
INC CX
CMP AL,0
JNE L6

MOV AH,2
L7:
POP DX
INT 21H
LOOP L7

POP CX
POP DX
RET
SHOWCHAR ENDP

CODES ENDS
END START

多哈vsavvasvghavsgh

  • 汇编语言程序设计的一般步骤是什么?
    答:常见的程序结构,是上述4种结构的混合体。一般来说,编制一个汇编语言程序的步骤如下:(1) 分析题意,确定算法或算法思想。算法是指解决问题的方法和步骤。比如现有的一些计算方法和日常生活中解决问题的逻辑思维推理方法等。(2) 根据算法画出流程图,简单的情况也可不画。画出描述算法的流程图,可以...
  • 汇编语言程序编程
    答:我知道:1)从0200H单元开始有100个数,编一个程序检查这些数,正数保持不变,负数取补后送回,要求程序框图和完整程序及每条指令的解释。(直接从0398HI单取消,然后进入POUJN脚本,改485这个值就可以了)2)已知数组A和数组B分别包含50和20个互不相等的带符号数(16位)编程将在A中但不在B中...
  • 用汇编语言设计一个程序,求10个无符号数中的最大值。并将最大值存入变 ...
    答:我有更好的答案邀请更新 2011-12-18 最佳答案 源文件来自《汇编子程序库》,注释来自:http://zhidao.baidu.com/question/148383731.html25) 标号: MMS功能:求单字节十六进制有符号数据块的极值入口条件:数据块的首址在DPTR中,数据个数在R7中。出口信息:最大值在R6中, 地址在R2R3中;最小值在R7中,地址...
  • 汇编语言
    答:; --- Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序 mov ah,1 int 21h mov ah,4ch ;结束程序 int 21h Buffer dw ?,? ;数据缓冲区 Code ENDS END Start ;编译到此结束
  • 用汇编语言编写一个程序
    答:以便填写一个'$'用做显示时的结束。mov al,[bx-1]xor ah,ah add bx,ax mov al,24h mov [bx],al print CRLF print msg2 print buffer+2 mov aX,4c00h int 21h code ends end start 由于我这里没有环境,程序没法调试,大致方法如此。希望可以帮到你。
  • 试编写一个汇编语言程序,求出首地址为DATA的100个无符号字数组中的最...
    答:追问 循环次数怎么为50啊 有100个呢 更多追问 本回答由提问者推荐 举报| 答案纠错 | 评论(1) 5 0 banksia 采纳率:72% 擅长: 汇编语言 其他编程语言 数据库DB VB 操作系统/系统故障 为您推荐: 经典汇编程序100例 关于汇编语言程序 汇编语言是一种 源程序 解释程序的功能是 用汇编语言编写小程...
  • 用8086汇编语言编写程序,接受从键盘上输入的一个两位十进制数字,这个数...
    答:其他回答 学汇编,要用到哪些软件 zpue1234 | 发布于2012-06-01 举报| 评论(1) 0 1 为您推荐: 汇编语言程序设计pdf 汇编语言小程序100例 关于汇编语言程序 8086 汇编语言 8086汇编语言解释 8086汇编语言是什么 《汇编语言程序设计》 8086汇编语言注意事项 汇编语言是一种 汇编语言编写程序...
  • 试编写一个汇编语言源程序,将键盘输入的ASCII码转换为二进制。_百度知...
    答:我有很多种方法,这一种代码最短。。 lz是大2的吧,这个实验我几个星期前做过。。 这些实验还是自己做下比较好。要是实在做不出,再看看别人怎么写。...汇编语言的特征 高级语言和汇编语言 汇编程序是将源程序 汇编语言使用机器指令 连续程序 汇编语言键盘输入数字 汇编语言 键盘输入 汇编语言删除 其他...
  • 汇编语言程序设计
    答:汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。汇编语言是为特定计算机或计算机系列设计的一种面向机器的语言,由汇编执行指令和汇编伪指令组成。采用汇编语言编写程序虽不如高级程序设计语言简便、直观,...
  • 编一个给小学生出两位数乘法运算题程序;用汇编语言编写,急需……
    答:num equ 6 ;数字位数(最好为偶数),若为奇数需稍微改动程序 msg1 db 'Enter the first number(ESC to exit) : ','$'msg2 db 'Enter the second number(ESC to exit) : ','$'msg3 db 0dh,0ah,'ERROR! Enter again(ESC to exit) : ','$'num1 db num dup(0) ;存第一个...