汇编语⾔程序设计项⽬完整代码及详细解析
汇编语⾔程序设计项⽬完整代码及详解解释
建议先⾃⼰思考问题的答案,不懂则返回看书
程序设计项⽬⼀
data segment
dw ?
data ends
end
要求:
只在定义的数据段’?‘中加⼊相关的内容,使得上⾯的程序可以在屏幕中间显⽰⼀个绿⾊的字符’A’。
完整代码
assume cs:data
data segment
db 'A'
start:
mov ax,data
mov ds,ax
mov ax,0b854h
mov es,ax
mov al,ds:[0]
mov ah,2
mov es:[0],ax
mov ax,4c00h
汇编语言如何编程int 21h
data ends
end start
程序设计项⽬⼆
对加密的字符串进⾏解密。
要求:
(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
完整代码:
db 'tqsfbe!zpvs!xjoht'
db '!!cf!zpvs!nbtufs!'
Cryptography ends
PlainText segment
db 2*17 dup(' ')
PlainText ends
code segment
start:
mov ax,Cryptography
mov ds,ax
mov ax,PlainText
mov es,ax
mov bx,0
mov cx,34
解密循环
s:
mov al,ds:[bx]
sub al,1
mov es:[bx],al
add bx,1
loop s
mov ax,0b850h
mov ds,ax
mov bx,0
mov di,0
mov ah,01110001B
mov cx,34
s1:
mov al,es:[bx]
mov ds:[di],ax
inc bx
add di,2
loop s1
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
(看起来⽐较难,但其实稍加思考便觉得挺简单的)
db '1. 3/1=        '
db '2. 5+3=        '
db '3. 9-3=        '
db '4. 4+5=        '
Calculate ends
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov ax,Calculate
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,3
mov cx,4
s:
push cx
mov ch,0
mov cl,ds:[si+1]
call judgechu
jcxz chu
mov ch,0
mov cl,ds:[si+1]
call judgejian
jcxz jian
mov ch,0
mov cl,ds:[si+1]
call judgejia
jcxz jia
s0:
add si,16
pop cx
loop s
jmp display ;计算完毕,跳转到显⽰结果函数
judgechu:
mov dl,47
sub cl,dl
ret
;题⽬除数数据均可⽤8位表⽰,则被除数为16位,ax中存放AL为商,AH为余数chu:
mov ax,0
mov al,ds:[si]
sub al,30h
mov dx,0
mov dl,ds:[si+2]
sub dl,30h
div dl
add al,30h
judgejian:
mov dx,45
sub cl,dl
ret
jian:
mov ax,0
mov al,ds:[si]
sub al,30h
mov dx,0
mov dl,ds:[si+2]
sub dl,30h
sub al,dl
add al,30h
mov ds:[si+4],al
jmp s0 judgejia:
mov dx,43
sub cl,dl
ret
jia:
mov ax,0
mov al,ds:[si]
sub al,30h
mov dx,0
mov dl,ds:[si+2]
sub dl,30h
add al,dl
add al,30h
mov ds:[si+4],al
jmp s0
;显⽰计算完的结果display:
mov ax,Calculate  mov ds,ax
mov di,0
mov ax,0b85eh
mov es,ax
mov si,0
mov ah,00001100b  mov cx,4
s1:
push cx
mov cx,16
s2:
mov al,ds:[di]
mov es:[si],ax
inc di
inc si
inc si
loop s2
add si,128
pop cx
loop s1
code ends
end start
程序设计项⽬四
编程计算x(x>2)的y(y>2)次⽅。使⽤add指令实现。
另,若学到第10章,使⽤两种⽅式实现:
(1)只使⽤add指令实现;
(2)只使⽤mul指令实现;
并将计算式显⽰在屏幕中央。
例如:
计算4的3次⽅。在屏幕中央显⽰格式如下:
4
^
3
-----
64
注意:结果不能超过16位寄存器可存储的最⼤值。
add完整代码:
多少个X相加,确定循环次数,得到⽤add实现乘法运算的算法
assume cs:code,ss:stack
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,16
;修改cx,dx的值来代表y,x的值,⽤栈保存
push cx
push dx
mov ax,dx
mov bx,ax
外层循环y-1次
;内层循环x-1次,ax初值算⼀次
sub cx,1
sub dx,1
s:
push cx
mov cx,dx
s0:
add ax,bx
loop s0
mov bx,ax
pop cx
loop s
;按要求显⽰结果
mov bx,0b850h
mov ds,bx
mov bx,0
;显⽰x
pop cx
add cx,30h

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。