汇编作业,解决300分,参与有分。

勇敢的BK7 2003-05-19 08:25:33
1,输入一个数字,输出其平方
2,输入两串字符,输出其是否相等
3,输入一些字符,要求显示结果加密,并能解密
4,输入0-65535的十进制,要求输出16进制的数字
5,制作一个类似贪食蛇游戏的一串字符字符,能用箭头控制其行动(比如按向上箭头,字符串就向上运动……)
...全文
24 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
勇敢的BK7 2003-05-26
  • 打赏
  • 举报
回复
我想分三个帖子给分。请反问我的另外两个帖子。
networld2002 2003-05-25
  • 打赏
  • 举报
回复
good good study
cctvnet 2003-05-25
  • 打赏
  • 举报
回复
up
紫郢剑侠 2003-05-24
  • 打赏
  • 举报
回复
gz
dongjianguo 2003-05-23
  • 打赏
  • 举报
回复
比较字符串是否相等,相等显示MATCH,否则显示NO MATCH,如下:

data segment
view1 db 'Match$'
view2 db 'NOMatch$'
string1 db 100 dup(0)
string2 db 100 dup(0)
data ends
;
stack segment
stac db 128 dup(0)
stack ends

;
code segment
assume cs:code,ds:data,ss:stack
start:
push ds
push ax
mov ax,data
mov ds,ax
mov dx,0
mov si,0
mov di,0
mov cx,0
inpsi:
mov ah,01h
int 21h
cmp al,20h
jz crlf
mov [si+string1],al
inc si
inc ch
jmp inpsi
crlf:
mov dl ,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
inpdi:
mov ah,01h
int 21h
cmp al,20h
jz crlff
mov [di+string2],al
inc di
inc cl
jmp inpdi
crlff:
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
cmp ch,cl
jnz view22
mov ch,0
lea si,string1
lea di,string2
loop1:
mov al,[si]
cmp al,[di]
jnz view22
inc si
inc di
loop loop1
lea dx,view1
mov ah,09h
int 21h
jmp exit

view22:
lea dx,view2
mov ah,09h
int 21h
exit:
pop ds
mov ax,4c00h
int 21h

code ends
end start

zxy1492 2003-05-22
  • 打赏
  • 举报
回复
^_^
我正愁以后的汇编作业怎么做
现在有救了
勇敢的BK7 2003-05-22
  • 打赏
  • 举报
回复
第五题
不过思路也不难
就是输出一行(或列)字符
另外对键盘输入调用中断处理程序,再来显示字符。
简单点,可以直接由行列互换,比如原来水平变成竖直,或反之

最重要的可能是类似定时器或者是用循环控制时间来显示字符串的运动。

各位一为意下如何??
mastking 2003-05-20
  • 打赏
  • 举报
回复
刚好我也在写汇编作业,和第4题目一样的
只不过我们的题目是要求编写子程序,再模块调用的...
4-14
编写子程序F10TO16,从键盘接受一无符号十进制数,在显示器上以十六进制显示其值。并写出调用F10T16的示例。

以下是F10T16模块

;F10T16子程序
;从键盘接受一无符号十进制数,在显示器上以十六进制显示其值
PUBLIC F10T16
DATA SEGMENT
TMP DB 5 DUP(0) ;临时存放输入数值
BUF DB 6 DUP(?) ;临时存放显示输出单元
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
F10T16 PROC FAR
PUSHF
PUSH BX
PUSH DX ;现场
PUSH SI
PUSH CX
PUSH DS
MOV AX,DATA
MOV DS,AX

;------------------输入------------------------------
LEA SI,TMP
XOR CX,CX ;CX清零
DO: MOV AH,1 ;输入第一个数
INT 21H
CMP AL,0DH
JZ EXIT ;回车时退出输入
SUB AL,30H
MOV [SI],Al ;得到数值保存
INC CX
INC SI
JMP DO
;--------------------------------------------------


;-----------------处理数值-------------------------
EXIT: JCXZ Z
LEA SI,TMP
XOR AX,AX ;AX清零,存放处理后的值
RE: MOV BX,10
MUL BX ;AX<--AX*10
ADD AL,[SI] ;取最高位
INC SI
DEC CX
CMP CX,0
JNZ RE ;只有1位的时候直接输出这一位
JMP NEXT
Z: MOV AX,0 ;无输入时候认为输入值为0
;------------------------------------------------


NEXT: PUSH AX ;-----------
PUSH DX
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH ;回车换行
INT 21H
POP DX
POP AX ;-----------


;------------十六进制输出------------------------

MOV CX,0
LOP1: MOV BX,AX ;暂存在BX中
AND AL,0FH ;取AL低4位
MOV AH,0
MOV DX,AX ;存最后一次的数
PUSH AX ;低4位进栈
INC CX ;余数个数加1
MOV AX,BX
PUSH CX
MOV CL,4
SHR AX,CL ;AX<--AX/16
POP CX
OR AX,AX
JNE LOP1 ;AX不为零,继续循环
CMP DX,10
JB L
MOV DX,0
PUSH DX
INC CX
L: LEA SI,BUF
LOP2: POP AX
CMP AL,10
JB L1
ADD AL,7
L1: ADD AL,30H
MOV [SI],AL
INC SI
DEC CX
JNE LOP2 ;(CX)≠0转LOP2继续循环
MOV [SI],BYTE PTR 'H'
INC SI
MOV [SI],BYTE PTR '$'
LEA DX,BUF
MOV AH,9 ;显示转换后的十进制数
INT 21H


POP DS
POP CX
POP SI
POP DX
POP BX
POPF
RET
F10T16 ENDP
CODE ENDS
END


测试主模块:
EXTRN F10T16:FAR
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
CALL F10T16 ;调用F10T16
MOV AH,4CH
INT 21H
CODE ENDS
END START
勇敢的BK7 2003-05-20
  • 打赏
  • 举报
回复
对了,随便加密,简单点的!
先谢谢路人甲、tcc、苦菜、黄金雨子。
继续啊!!!!!!

麻烦路人甲您拉!拜托
123xb 2003-05-20
  • 打赏
  • 举报
回复
好多汇编高手呀
佩服佩服
bigtianji 2003-05-20
  • 打赏
  • 举报
回复
DECIHEX SEGMENT
ASSUME CS: DECIHEX
MAIN PROC FAR
REPEAT: CALL DECIBIN
CALL CRLF
CALL BINIHEX
CALL CRLF
JMP REPEAT
MAIN ENDP


DECIBIN PROC NEAR
MOV BX,0
NEWCHAR: MOV AH,1
INT 21H
SUB AL,30H
JL EXIT
CMP AL,9D
JG EXIT
CBW
XCHG AX,BX
MOV CX,10D
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NEWCHAR
EXIT: RET
DECIBIN ENDP

BINIHEX PROC NEAR
MOV CH,4
ROTATE: MOV CL,4
ROL BX,CL
MOV AL,BL
AND AL,0FH
ADD AL,30H
CMP AL,3AH
JL PRINTIT
ADD AL,7H
PRINTIT: MOV DL,AL
MOV AH,2
INT 21H
DEC CH
JNZ ROTATE
RET
BINIHEX ENDP
CRLF PROC NEAR
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
RET
CRLF ENDP
DECIHEX ENDS
END MAIN
broown 2003-05-20
  • 打赏
  • 举报
回复
gz
broown 2003-05-20
  • 打赏
  • 举报
回复
up
bigtianji 2003-05-20
  • 打赏
  • 举报
回复
我作完信号作业,帮你想一想第三,第四个。。。第五个实在不会。
SLSnake 2003-05-20
  • 打赏
  • 举报
回复
强啊!
mastking 2003-05-20
  • 打赏
  • 举报
回复
至于第3题加密解密的...我的汇编课程设计做的就是这样的一个题目,不过我们是对数字,不是字符,

比如:
其加密、解密的规则如下:
原码:0 1 2 3 4 5 6 7 8 9
密码:7 5 9 1 3 6 8 0 2 4
解码:7 3 8 4 9 1 5 0 6 2
象上面用XLAT指令进行查表转换不就行了,很简单啦~~~

字符加密,一般还是ASCII移位比较多吧...
你可以参考Base64编码/解码原理
这里引用老罗的一段代码:(具体的,你去他主页看吧,解释地很详细的)
;***********************************************
;程序名称:演示Base64编码/解码原理
;作者:罗聪
;日期:2002-9-14
;出处:http://laoluoc.yeah.net(老罗的缤纷天地)
;注意事项:如欲转载,请保持本程序的完整,并注明:
;转载自“老罗的缤纷天地”(http://laoluoc.yeah.net)
;***********************************************

.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

DllEntry proto :HINSTANCE, :DWORD, :DWORD
Base64Encode proto :DWORD, :DWORD
Base64Decode proto :DWORD, :DWORD

.data
;Base64 -> ASCII mapping table
base64_alphabet db "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

;ASCII -> Base64 mapping table
base64table db 43 dup (255)
db 62,255,255,255,63,52,53,54,55,56,57,58,59,60,61,255
db 255,255,0,255,255,255,0,1,2,3,4,5,6,7,8,9,10,11,12,13
db 14,15,16,17,18,19,20,21,22,23,24,25,255,255,255,255
db 255,255,26,27,28,29,30,31,32,33,34,35,36,37,38
db 39,40,41,42,43,44,45,46,47,48,49,50,51
db 132 dup (255)

.code
DllEntry proc hInst: HINSTANCE, reason: DWORD, reserved1: DWORD
mov eax, TRUE
ret
DllEntry endp


;**********************************************************
;函数功能:进行Base64编码
;参数:
; source = 传入的字符串
; destination = 返回的编码
;**********************************************************
Base64Encode proc uses ebx edi esi source:DWORD, destination:DWORD
LOCAL sourcelen:DWORD

invoke lstrlen, source
mov sourcelen, eax

mov esi, source
mov edi, destination
@@base64loop:
xor eax, eax
.if sourcelen == 1
lodsb ;source ptr + 1
mov ecx, 2 ;bytes to output = 2
mov edx, 03D3Dh ;padding = 2 byte
dec sourcelen ;length - 1
.elseif sourcelen == 2
lodsw ;source ptr + 2
mov ecx, 3 ;bytes to output = 3
mov edx, 03Dh ;padding = 1 byte
sub sourcelen, 2 ;length - 2
.else
lodsd
mov ecx, 4 ;bytes to output = 4
xor edx, edx ;padding = 0 byte
dec esi ;source ptr + 3 (+4-1)
sub sourcelen, 3 ;length - 3
.endif

xchg al,ah ;flip eax completely
rol eax, 16 ;can this be done faster
xchg al,ah

@@:
push eax
and eax, 0FC000000h ;get the last 6 high bits
rol eax, 6 ;rotate them into al
mov al, byte ptr [offset base64_alphabet + eax] ;get encode character
stosb ;write to destination
pop eax
shl eax, 6 ;shift left 6 bits
dec ecx
jnz @B ;loop

cmp sourcelen, 0
jnz @@base64loop ;main loop

mov eax, edx ;add padding and null terminate
stosd

ret
Base64Encode endp


;**********************************************************
;函数功能:进行Base64解码
;参数:
; source = 传入的编码
; destination = 返回的字符串
;**********************************************************
Base64Decode proc uses ebx edi esi source:DWORD, destination:DWORD
LOCAL sourcelen:DWORD

invoke lstrlen, source
mov sourcelen, eax

mov esi, source ;esi <- source
mov edi, destination ;edi <- destination
mov ecx, sourcelen
shr ecx, 2
cld

;-------------[decoding part]---------------

@@outer_loop:
push ecx
mov ecx, 4
xor ebx, ebx
lodsd
@@inner_loop:
push eax
and eax, 0ffh
mov al, byte ptr [offset base64table + eax]
cmp al, 255
je @@invalid_char
shl ebx, 6
or bl, al
pop eax
shr eax, 8
dec ecx
jnz @@inner_loop
mov eax, ebx
shl eax, 8
xchg ah, al
ror eax, 16
xchg ah, al
stosd
dec edi
pop ecx
dec ecx
jnz @@outer_loop
xor eax, eax
jmp @@decode_done

;-------------------------------------------

@@invalid_char:
mov eax, -1
@@decode_done:
ret
Base64Decode ENDP


end DllEntry
;******************** over ********************
;by LC

勇敢的BK7 2003-05-19
  • 打赏
  • 举报
回复
D:\Documents and Settings\spread\My Documents\计算机文摘--编程心得.mht ?
请发给我。yzh@mail.nairc.ac.cn

我好长时间不用汇编了,麻烦各位大侠拉。
谢谢先
spreadwide 2003-05-19
  • 打赏
  • 举报
回复
1.mov ah,1h
int 21h
mul al
mov dx,ax
mov ah,2h
int 21h
2.我上机调试一下再和你说。
3.?????


4.D:\Documents and Settings\spread\My Documents\计算机文摘--编程心得.mht 去看看,那有,分析的很清楚。
5.这个就不知道了。知道了贴出来让我看看。
WuChenCan 2003-05-19
  • 打赏
  • 举报
回复
关注!
huangjinyuzi 2003-05-19
  • 打赏
  • 举报
回复
3 算法 简单的加密 :把每位不带进位左移一位显示即可.解密则每位右移一位!

5 我也不会的了.不过给出一个用c语言写的原代码,希望有所帮助.
http://www.cstudyhome.com/wenzhang06/ReadNews.asp?NewsID=51
加载更多回复(6)

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧