<span style="font-family: Arial, Helvetica, sans-serif;"><循环程序设计></span>
1.如何输出自定义变量
2.21H中断 1号输入 2号输出 (一个字符)
data segment
man db 0
woman db 0
COUNT equ 10
disp db 0dh, 0ah, 'man or woman 1/0?', '$'
disp1 db 0dh, 0ah, 'man:', '$'
disp2 db 0dh, 0ah, 'woman:', '$'
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
mov cx, COUNT
input:
mov dx, offset disp
mov ah, 9
int 21h
mov ah, 1
int 21h
cmp al, '1'
jz mancount
cmp al, '0'
jz womancount
jmp input
mancount:
inc man
jmp loopnext
womancount:
inc woman
loopnext:
loop input
mov dx, offset disp1
mov ah, 9
int 21h
mov bx, offset man
mov dl, [bx]
cmp dl, 10
jb hehe
add dl, 7
hehe:
add dl, 30h
mov ah, 2
int 21h
mov dx, offset disp2
mov ah, 9
int 21h
mov bx, offset woman
mov dl, [bx]
cmp dl, 10
jb haha
add dl, 7
haha:
add dl, 30h
mov ah, 2
int 21h
mov ah,1
int 21h
mov ah, 4ch
int 21h
code ends
end start
/*矩阵相乘
*
*/
assume cs:code, ds:data, ss:stack
data segment
s1 db 255, 2, 26, 251, 2, 1, 3, 4, 6, 5, 8, 9, 8, 2, 5, 7
s2 db 224, 2, 7, 4
re dw 4 dup(0)
temp dw 0
temp1 dw 0
data ends
stack segment
dw 15 dup(0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 0010h
lea si, s1
lea di, s2
lea bx, re
mov dx, 0
mov cx, 4
outer:
push cx
mov cx, 4
inner:
mov al, [si]
mul ds:byte ptr[di] ;结果存入ax
add dx, ax
inc si
inc di
loop inner
mov ds:[bx], dx
mov di, 16
mov dx, 0
inc bx
inc bx
pop cx
loop outer
;show
mov cx, 4
lea si, re
show:
mov bx, [si]
call putoutHex
inc si
inc si
push dx
push ax
mov dl, 0dh
mov ah, 2
int 21h
mov dl, 0ah
mov ah, 2
int 21h
pop ax
pop dx
loop show
mov ax, 4c00h
int 21h
putoutHex proc
push cx
mov temp, bx
mov temp1, bx
mov cl, 8
shr temp, cl
mov bx, temp
call main1
and temp, 00ffh
mov bx, temp1
call main1
pop cx
ret
main1 proc
mov al, bl
mov cl, 4
shr al, cl
cmp al, 10
jb kk
add al, 7
kk:
mov dl, al
cmp dl, 0
je kk2
add dl, 30h
mov ah, 2
int 21h
and bl, 0fh
kk2:
cmp bl, 10
jb kk1
add bl, 7
kk1:
mov dl, bl
add dl, 30h
mov ah, 2
int 21h
ret
main1 endp
putoutHex endp
code ends
end start
考题:
/* 将字符串中的小写字母转换为大写字母
*
*
*/
assume cs:code, ds:data
data segment
pkey db 'please input strings ','$'
InStr db 20 dup(0)
temp dw 0
data ends
code segment
start:
mov ax, data
mov ds, ax
mov dx, offset pkey
mov ah, 9
int 21h
push dx
push ax
mov dl, 0ah ;回车换行
mov ah, 2
int 21h
mov dl, 0dh
mov ah, 2
int 21h
pop ax
pop dx
mov cx, 0
lea si, InStr
loop1:
mov ah, 1
int 21h
cmp al, '$'
je over
mov byte ptr[si], al
inc si
inc cx
jmp loop1
over:
push dx
push ax
mov dl, 0ah ;回车换行
mov ah, 2
int 21h
mov dl, 0dh
mov ah, 2
int 21h
pop ax
pop dx
lea si, InStr
compL:
mov bl, [si]
cmp bl, 'a'
jb noL
cmp bl, 'z'
ja noL
sub bl, 32
mov dl, bl
mov ah, 2
int 21h
noL:
inc si
loop compL
mov ah, 1
int 21h
mov ah, 4ch
int 21h
code ends
end start