汇编语言 —— 程序设计
考试出题会在以下中选二。
Data Segment
Pcount dw 0
Ncount dw 0
Zcount dw 0
array dw 7,-1,2,0,-2,5,6,0
Data ends
Code Segment
Assume DS:Data,cs:Code
Start: mov ax,Data
mov ds,ax
xor ax,ax
xor bx,bx
xor dx,dx
mov cx,array
jcxz save
lea si,array+2
again: cmp word ptr [si],0
jl lower
je equal
inc ax
jmp loop1
lower: inc bx
jmp loop1
equal: inc dx
loop1: add si,2
loop again
save : mov Pcount,ax
mov Ncount,bx
mov Zcount,dx
mov ax,4c00h
int 21H
Code ends
end Start
Test方法:
Data Segment
BUF dw 1234H
count db ?
Data ends
Code Segment
Assume DS:Data,CS:Code
Start: mov ax,Data
mov ds,ax
mov bx,BUF
mov cx,16 ;循环次数
xor dl,dl ;记录1的个数
mov ax,0001H
again: Test bx,ax
jz next ;为0跳转
inc dl ;不为0加1
next : Shl ax,1
loop again
mov count,dl
mov ax,4c00h
int 21H
Code ends
end Start
循环移位法:
Data Segment
BUF dw 1234H
count db ?
Data ends
Code Segment
Assume DS:Data,CS:Code
Start: mov ax,Data
mov ds,ax
mov bx,BUF
mov cx,16 ;循环次数
xor dl,dl ;记录1的个数
again: Rol bx,1
jnc next ;cf不为1就跳
inc dl ;cf为1就加一
next : loop again
mov count,dl
mov ax,4c00h
int 21H
Code ends
end Start
Data Segment
Array db 1,2,34,4,-5,2,-7
Count equ $ - Array
Max db ?
Min db ?
Data ends
Code Segment
Assume DS:Data,CS:Code
Start: mov ax,Data
mov ds,ax
lea bx,Array
mov al,[bx] ; 将第一个元素作为最大值的初始值
mov dl,al ; 同样也作为最小值的初始值
mov cx,Count - 1
again: inc bx
mov ah,[bx]
cmp al,ah
JGE Next ;大于等于就跳
mov al,ah ;若小于就替换,确保al中是最大的
Next : cmp dl,ah
JLE Over ; 小于等于就跳
mov dl,ah ; 若大于就替换,确保dl中最小
Over : Loop again
mov Max,al
mov Min,dl
mov ax,4c00h
int 21H
Code ends
end Start
Data Segment
string db 'This is a string!$'
result dw ?
Data ends
Code Segment
Assume DS:Data,CS:Code
Start: mov ax,Data
mov ds,ax
lea bx,string
xor cx,cx
again: mov al,[bx]
cmp al,'$'
JZ Exit
cmp al,20H
JNZ next ; 若不等于空格就跳
inc cx ; 等于就加一
next : inc bx
Jmp again
Exit : mov result,cx
mov ax,4c00h
int 21h
Code ends
end Start
5.统计字符串长度
法一:
Data Segment
Str1 db 'DATASTRING'
Num EQU $-Str1
Data ends
法二:
Data Segment
BUF db 10,?,10 dup('$')
str1 db "Please input a string:(length<9):$"
str2 db 0ah,0dh,"The length of the string is $"
Data ends
Code Segment
Assume DS:Data , CS:Code
Start : mov ax,data
mov ds,ax
lea dx,str1;输出提示语句
mov ah,09h
int 21h
lea dx,BUF;输入字符串
mov ah,0ah
int 21h
mov cl,[BUF+1];获取长度
add cl,30h
lea dx,str2;输出长度
mov ah,09h
int 21h
mov dl,cl
mov ah,02h
int 21h
mov ax,4c00h
int 21h
Code ends
end Start