给它简单的加密一下就行了,例如把所有字符都加上1,在输出字符串前先把所有字符都减1
data segment
szMsg db 'Ifmmp!Xpsme$'
code segment
lea si,szMsg
mov cx,11
decloop:
mov al, byte ptr[si]
dec al
mov byte ptr[si],al
inc si
loop decloop
输出
产生随机数很容易,比如你先设个 1,然后弄个类似这样的算法:+8 9 -5 哈哈,最后再弄个除法取余,产生的结果就够随机了。。
但是的说,不太懂,好像从dos窗口中显示的话很麻烦,需要自己读取bmp图像,曾经试过,后来放弃了
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
明天晚上要上机实验微机原理,如果我做不出来那程序,那就完蛋了。虽然说是超级简单,但是对于我一个新学者,并且是电脑文盲来说,艰巨性还是可以想象的。
题目要求是:(1)单子节无符号数排序:DATANUM单元开始存放双字节无符号数,表示要排序数据的个数;DATAS单元开始存放要排序的数据,数据格式至少10个,程序运行之后,这些数据按照由小到大的顺序仍然存放于DATAS单元开始的位置‘
(2)去极值滤波:某控制系统为了抗干扰,采用去极值滤波法处理采集数据,采集数据所用A/D转换器精度为12位,取连续6个A/D采样值(双字节,低12位),要求去掉最大值和最小值,将余下的4个数求平均值,用该平均值代表当前时刻系统状态的真值。试编一程序完成这一滤波过程。
以上算法我也懂,但是刚学微机,指令什么的都不知道该如何用。各位好手,麻烦帮帮忙,帮我编写以上两个小程序,最好的给出注释。先给200,满意的追100
解析:
你等我
DATANUM=10 ;设有10个数据
STACK SEGMENMT STACK ‘STACK’
DW 100H DUP()
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
DATABUF DW DATANUM
DB DATANUM DUP(?)
DATA EDATANUMDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
; 取出随机数据
MOV CX,DATABUF
LEA SI,DATABUF+2
MOV BL,23
MOV AL,11
LP:
MOV [SI],AL
INC SI
ADD AL,BL
LOOP LP
; 数据排序
MOV CX,DATABUF
DEC CX
LEA SI,DATABUF+2
ADD SI,CX
LP1:
PUSH CX
PUSH SI
LP2:
MOV AL,[SI]
CMP AL,[SI-1]
JAE NOXCHG
XCHG AL,[SI-1]
MOV [SI],AL
NOXCHG:
DEC SI
LOOP LP2
POP SI
POP CX
LOOP LP1
;数据排序结束
MOV AH,4CH ;返回DOS
MOV AL,0
IDATANUMT 21H
CODE ENDS
END START
我这个连中断都用上了
第二题
PUSH PSW ;保护现场
PUSH A
CLR C ;进位标志位清零
MOV DATA,DATA2
MOV A,DATA1
SUBB A,DATA ;求Yn-1 -Yn
JNC COMPARE ;如果Yn-1 -Yn≥0,转COMPARE
CPL A ;如果Yn-1 -Yn<0, 求补
INC A
COMPARE: CLR C
SUBB A,LIMIT ;│Yn-Yn-1│和△y比较
JC OVER ;如果│Yn-Yn-1│≤△y,DATA2→DATA
MOV DATA,DATA1 ;如果│Yn-Yn-1│>△y,DATA1→DATA
OVER: POP A ;恢复现场
POP PSW
RET ;返回
这个作为参考,是MCS的
;入口 :A,SDAT,DELTY
;占用资源:B
;堆栈需求:2字节
;出口 :A
JUGFILT :MOV B,A
CLR C
SUBB A,SDAT
JNC JUGFT1
CPL A
INC A
JUGFT1 :SETB A
SUBB A,#DELTY
JNC JUGFT3
MOV A,SDAT
RET
JUGFT3 :MOV A,B
MOV SDAT,A
RET
;中位值滤波程序
;入口 :ADDPH,ADDPL,N
;占用资源:ESELSORT
;堆栈需求:4字节
;出口 :A
MEDFILT :LCALL ESELSORT
MOV A,N
CLR C
RRC A
ADD A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
JNC MEDFT1
INC DPH
MEDFT1 :MOVX A,@DPTR
RET
;N点算术平均滤波
;入口 :ADDPH,ADDPL,N
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口 :A
AVFILT :MOV A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
CLR A
MOV R3,A
MOV R4,A
MOV R7,N
AVFT1 :MOVX A,@DPTR
INC DPTR
ADD A,R4
MOV R4,A
JNC AVFT2
INC R3
AVFT2 :DJNZ R7,AVFT1
MOV R7,N
MOV R2,#00H
LCALL NDIV31
MOV A,R4
RET
;N点加权平均滤波
;入口 :ADDPH,ADDPL,N
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口 :A
QAVFILT :CLR A
MOV R3,A
MOV R4,A
MOV R7,N
MOV P2,ADDPH
MOV R1,ADDPL
MOV DPTR,#QAVTAB
QAVFT1 :MOVC A,@A+DPTR
MOV B,A
MOVX A,@R1
INC DPTR
INC R1
MUL AB
ADD A,R4
MOV R4,A
MOV A,B
ADDC A,R3
MOV R3,A
DJNZ R7,QAVFT1
MOV A,R4
JNB ACC7,QAVFT2
INC R3
QAVFT2 :MOV A,R3
RET
QAVTAB :DB
;一阶加权滞后滤波程序
;入口 :A,DELTY
;占用资源:B,R3,R4
;堆栈需求:2字节
;出口 :A
BQFILT :MOV B,A
CLR A
MOV DPTR,#ABTAB
MOVC A,A+DPTR
MUL AB
MOV R4,A
MOV R3,B
MOV A,01H
MOVC A,A+DPTR
MOV B,DELTY
MUL AB
ADD A,R4
MOV R4,A
MOV A,B
ADDC A,R3
MOV R3,A
MOV A,R4
JNB ACC7,FT1
INC R3
FT1 :MOV A,R3
MOV DELTY,A
RET
BQTAB :DB 80H,80H
1程序结果是什么(DATA2的值)
本程序功能是:将DS:SI指向的10个数据复制到ES:DI中。
所以结果是:DATA2 DB '1234567890’
20005 B8 ---- R MOV AX, EXTRA
MOV AX, EXTRA是将EXTRA的段地址送AX。
EXTRA是一个段名称,它里面存的是段地址,具体值不能确定。
段地址:偏移地址(如DS:SI,ES:DI)就确定了具体的内存地址。
3001A ---- 0010 R LIST1 DD DATA1
LIST1的地址是DS:1A,内容为DATA1的地址
4
REP重复 *** 作前缀与循环指令LOOP的区别是:LOOP循环指令先执行CX←CX-1,然后根据CX的值确定下一步的 *** 作:如果CX=0,就退出循环,否则循环继续;而REP重复 *** 作前缀是先检测CX,然后根据CX的值确定下一步的 *** 作:如果CX=0,则退出REP,否则,CX←CX-1,执行REP后面的串 *** 作指令。
我给你个输入三个数,从小到大输出的:
汇编:
inkey macro nn
mov ah,1h
int 21h
sub al,30h
mov bl,nn
mul bl
add sum,ax
endm
data segment
sum dw 0
str1 dw 0
str2 dw 0
str3 dw 0
buff1 db 0
bu2 db " 1 2 3 4 5 6 7 8 9 A", 0dh,0ah,"$"
data ends
stack segment para stack
db 100 dup()
stack ends
code segment
assume cs:code,ds:data,es:data,ss:stack
sub1 proc far
start: push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov es,ax
inkey 100 ;输入第一个数
inkey 10
inkey 1
mov ax,sum
mov str1,ax
mov sum,0
mov dl," "
mov ah,2h
int 21h
inkey 100 ;输入第二个数
inkey 10
inkey 1
mov ax,sum
mov str2,ax
mov sum,0
mov dl," "
mov ah,2h
int 21h
inkey 100 ;输入第三个数
inkey 10
inkey 1
mov ax,sum
mov str3,ax
mov dl,0dh
mov ah,2h
int 21h
mov dl,0ah
mov ah,2h
int 21h
mov ax,str1 ;三个数比较大小
cmp ax,str2
jae a7
jmp a8
a7: mov bx,str2
mov str2,ax
mov str1,bx
a8: mov ax,str2
cmp ax,str3
jae a9
jmp a11
a9: mov bx,str3
mov str3,ax
mov str2,bx
mov ax,str1
cmp ax,str2
jae a10
jmp a11
a10: mov bx,str2
mov str2,ax
mov str1,bx
a11: mov ax,str1
mov al,ah
call sub3
mov ax,str1
call sub3
mov dl,"H"
mov ah,2h
int 21h
mov dl," "
mov ah,2h
int 21h
xor ah,ah
mov ax,str2
mov al,ah
call sub3
mov ax,str2
call sub3
mov dl,"H"
mov ah,2h
int 21h
mov dl," "
mov ah,2h
int 21h
xor ah,ah
mov ax,str3
mov al,ah
call sub3
mov ax,str3
call sub3
mov dl,"H"
mov ah,2h
int 21h
ret
sub1 endp
SUB2 PROC
cmp al,9
ja g1
add al,"0"
jmp g2
g1: add al,37h
g2: mov dl,al
mov ah,2
int 21h
RET
SUB2 ENDP
SUB3 PROC
mov buff1,al
shr al,1
shr al,1
shr al,1
shr al,1
CALL SUB2
mov al,buff1
and al,0fh
CALL SUB2
RET
SUB3 ENDP
code ends
end start
高级(C语言):
#include<stdioh>
void main()
{
int t;
int a,b,c;
printf("请输入三个整数:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}//a,b交换
if(a>c)
{
t=a;
a=c;
c=t;
}//a,c交换
if(b>c)
{
t=b;
b=c;
c=t;
}//b,c交换
printf("从小到大输出:%d,%d,%d\n",a,b,c);
}
以上就是关于【汇编语言】类似于“hello world”的一个小程序。。。全部的内容,包括:【汇编语言】类似于“hello world”的一个小程序。。。、求用汇编语言编写一个产生随机数的小程序(比如按一下键位在1~9中随机产生一个),我是初学者,用的是masm、新手求教汇编语言程序,超级简单,但是我就是不会写,头疼死了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)