寒假程序设计项目
2月10日更新第11题
2月6日更新第13题,包括设计流程图
请大家一定要自行思考解决后再参考(暂时只做到了第10个)
相应文件下载:
1.字模提取软件 http://pan.baidu.com/s/1kT5F3mf
2.程序demo图片 http://pan.baidu.com/s/1pJlUGUB
版权信息:
题目版权信息:面向河北农业大学学生的计算机科学与技术学习活动
解题代码 , 过程分析版权信息 : CSDN:msdys 百度:水℃幸福
程序设计项目一
data segment
dw ?
data ends
end
要求:
只在定义的数据段'?'中加入相关的内容,使得上面的程序可以在屏幕中间显示一个绿色的字符'A'。
参考代码
指令和数据没有本质上的区别 认真理解这句话
分析:中间位置160*13+80=2160 A=41h 绿=02h
直接做不出,先写个可以显示的,再找16进制填进去
浅析:先不用data段,写出一个简单的程序,即写出注释符号所在的程序.
运行程序,查看cs:0中的数据,然后将数据填入data段,注意高地位
;assume cs:data
data segment
dw 00b8h,8eb8h,0bbc0h,0870h,41b8h,0b900h,0002h,8926h
dw 2607h,4f89h,0b801h,4c00h,21cdh
; mov ax,0b800h
; mov es,ax
; mov bx,2160
; mov ax,41h
; mov cx,02h
; mov es:[bx],ax
; mov es:[bx+1],cx
;mov ax,4c00h
;int 21h
data ends
end
程序设计项目二
对加密的字符串进行解密。
要求:
(1)加密的字符串放在Cryptography段。
(2)解密方法:将Cryptography段的每个字符的ASCII值减去1。
(3)用汇编语言实现程序,将Cryptography段的数据按照解密方法进行解密,将解密后的数据放在PlainText段,然后再把解密之后的字符串以白底蓝字方式显示到屏幕中间。
(4)密文和明文的数据段定义如下:
Cryptography segment
db 'tqsfbe!zpvs!xjoht'
db '!!cf!zpvs!nbtufs!'
Cryptography ends
PlainText segment
db 2*17 dup (' ')
PlainText ends
参考代码
assume cs:code,ds:Cryptography ;ds数据段,名字可以随便,但是段名必须是已有的
Cryptography segment
db 'tqsfbe!zpvs!xjoht'
db '!!cf!zpvs!nbtufs!'
Cryptography ends
PlainText segment
db 2*17 dup (' ') ;+3*16=48
PlainText ends
code segment
start: mov ax,Cryptography ;最后一次错在了这,必须加上这两句,要不然ds无数据
mov ds,ax
;解密
mov ax,0b800h
mov es,ax
mov ah,71h
mov si,2126 ;中间是160*13+80-34=2126 左偏移34位开始
mov bx,0
mov cx,34
s:
mov al,ds:[bx]
dec al ;-1上次错在使用了ax
mov ds:[bx+48],al ;存入PlainText
mov es:[si],ax ;结合ah al 显示
add si,2
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end start
程序设计项目三
加、减、除三则运算。
要求:
(1)读取字符串的内容,判断第四个字符是'+'、'-'或'/',然后按照相应的符号进行运算,并把运算结果转换为字符串存放在等号后面,最后把算式显示到屏幕中间,白底蓝字。
(2)注意数字字符的ASCII与数字的对应关系,数字的数值加30H为这个数字的字符所对应的ASCII。
(3)数据段定义如下:
Calculate segment
db '1. 3/1= '
db '2. 5+3= '
db '3. 9-3= '
db '4. 4+5= '
Calculate ends
参考代码
;;;;可能用到的知识: 1.and or p138
;;;;知识 + - * / add sub mul div
;;;;asc 2b 2d 2a 2f 101011 101101 101010 101111
;;;;asc-30 d f c 11 数字asc - 30就是真实数字
;div:除数为8位时,被除数为16位,默认放在ax寄存器中.商则放在al中,余数放在ah中
assume cs:code,ds:Calculate
Calculate segment
db '1. 3/1= ' ;运算符号是第5个字符
db