寒假汇编语言作业(1-3)
程序设计项目一
data segment
dw ?
data ends
end
要求:
只在定义的数据段'?'中加入相关的内容,使得上面的程序可以在屏幕中间显示一个绿色的字符'A'。
分析:
中间位置:160*12+80=2000=7d0h 'A' =41h,绿字=02h
可以写个可以显示的,然后再DEBUG打开找到程序在内存是如何保存的,再找16进制填进去,注意高地位
参考代码:
1 ;assume cs:data 2 3 data segment 4 dw 00b8h,8eb8h,0bbc0h,07d0h,41b8h,0b900h,0002h,8926h 5 dw 2607h,4f89h,0b801h,4c00h,21cdh 6 7 ; mov ax,0b800h 8 ; mov es,ax 9 ; mov bx,7d0h 10 ; mov ax,41h 11 ; mov cx,02h 12 ; mov es:[bx],ax 13 ; mov es:[bx+1],cx 14 ; mov ax,4c00h 15 ; int 21h 16 17 data ends 18 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
分析:
白底蓝字 = 71h
参考代码:
1 assume cs:code 2 3 Cryptography segment 4 db 'tqsfbe!zpvs!xjoht' 5 db '!!cf!zpvs!nbtufs!' 6 Cryptography ends 7 8 PlainText segment 9 db 2*17 dup (' ') 10 PlainText ends 11 12 code segment 13 start: 14 mov ax,Cryptography 15 mov ds,ax 16 mov ax,0b800h 17 mov es,ax 18 mov si,0 19 mov di,7a8h ; 160*12+40=1960=7a8h 20 mov ah,71h 21 mov cx,34 22 s: 23 mov al,ds:[si] 24 dec al 25 mov ds:[si+48],al 26 mov es:[di],ax 27 add di,2 28 inc si 29 loop s 30 31 mov ax,4c00h 32 int 21h 33 34 code ends 35 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 assume cs:code 2 3 Calculate segment 4 db '1. 3/1= ' 5 db '2. 5+3= ' 6 db '3. 9-3= ' 7 db '4. 4+5= ' 8 Calculate ends 9 10 code segment 11 start: 12 mov ax,Calculate 13 mov ds,ax 14 mov si,0 15 mov cx,4 16 s: 17 push cx 18 mov ah,0 19 mov al,ds:[si+3] 20 sub al,30h 21 mov dl,ds:[si+4] 22 mov dh,ds:[si+5] 23 sub dh,30h 24 call check_symbol 25 add al,30h 26 mov ds:[si+8],al 27 add si,10h 28 pop cx 29 loop s 30 ;输出 31 mov ax,0b800h 32 mov es,ax 33 mov di,722h 34 mov ah,71h 35 mov si,0 36 mov cx,4 37 s0: 38 push cx 39 push di 40 mov cx,10h 41 s1: 42 mov al,ds:[si] 43 mov es:[di],ax 44 inc si 45 add di,2 46 loop s1 47 pop di 48 pop cx 49 add di,0a0h 50 loop s0 51 52 mov ax,4c00h 53 int 21h 54 55 check_symbol: 56 ;用标识符实现 57 mov cl,'+' 58 cmp dl,cl 59 je add_ 60 mov cl,'-' 61 cmp dl,cl 62 je add_ 63 mov cl,'/' 64 cmp dl,cl 65 je div_ 66 ;用jcxz实现 67 ; mov ch,0 68 ; mov cl,dl 69 ; sub cx,'+' 70 ; jcxz add_ 71 ; mov cl,dl 72 ; sub cx,'-' 73 ; jcxz sub_ 74 ; mov cl,dl 75 ; sub cx,'/' 76 ; jcxz div_ 77 78 add_: 79 add al,dh 80 ret 81 82 sub_: 83 sub al,dh 84 ret 85 86 div_: 87 div dh 88 ret 89 90 code ends 91 end start