判斷方程AX2+BX+C=0是否有實根。若有實根,則將字節變量TAG置1,否則置0。假設A、B、C均爲字節變量,數據範圍爲-128~127。
Data segment
A db 7
B db 8
C db 6
Tag db ?
Data ends
Code segment
Assume ds:data,cs:code
Start:
Mov ax,data
Mov ds,ax
Mov al,b
Imul al;乘法指令,求出B2的值並放入AX中
Mov bx,ax
Mov al,a
Imul c
Mov cx,4
Imul cx
Cmp bx,ax
Jge yes
Mov tag ,0
Jmp done
Yes: mov tag,1
Done: mov ah,4ch
Int 21h
Code Ends
End start
設VARY中有一組8位的符號數,編程統計其中 正數、負數、零的個數,分別存 VM、VN、VK變量中。
stack segment para stack
dw 20H dup(0)
stack ends
data segment
vary db 23h,78h,56h,0abh,00h,0cdh,59h,14h,98h,0efh,00h,0c0h
cnt equ $-vary
vm db ?
vn db ?
vk db ?
data ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov bx,0
mov dl,0
lea si,vary
mov cx,cnt
lop1:
cmp byte ptr[si],0
je zero
js lop2
inc bh
jmp next
lop2:
inc bl
jmp next
zero:
inc dl
next:
inc si
loop lop1
mov vm,bh
mov vn,bl
mov vk,dl
mov ah,4ch
int 21h
code ends
end start
設在數據段中定義有三個變量X,Y,Z,其中X的值爲8,Y的值爲9,請利用算術移位指令編寫程序,計算出下式的值(假設乘積的結果只有低16位有效)。
DATA SEGMENT
S DW (?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,100
MOV AX,0H
MOV BX,1H
LOOP1:
ADD AX,BX
INC BX
LOOP LOOP1
MOV S,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
編程實現: S=1+2+3+……+100 ,要求計算後的結果存放在變量S裏。
DATA SEGMENT
S DW (?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,100
MOV AX,0H
MOV BX,1H
LOOP1:
ADD AX,BX
INC BX
LOOP LOOP1
MOV S,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
已知有兩個雙字長度的數DATA1和DATA2,要求用8086彙編語言編程實現兩數相加,並將結果存放在result中,採用高地址優先存儲結果(如1234H,5678H表示56781234H)。程序的數據段部分已給出,要求補充完整程序,實現上述要求的功能。
DATA SEGMENT
DATA1 DW 5311H,8A13H ;表示數據8A135311H
DATA2 DW 4783H,9526H ;表示數據95264783H
RESULT DW 2 DUP(?) ; 存放多字節加法的結果
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,DATA1
MOV DX,DATA1+2
ADD AX,DATA2 ;低字部分相加
ADC DX,DATA2+2 ;高字部分帶進位相加
MOV RESULT,AX ;存放低字部分相加結果
MOV RESULT+2,DX ;存放高字部分相加結果
CODE ENDS
END START