汇编程序题

判断方程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,DATA12

    ADD AX,DATA2      ;低字部分相加

    ADC DX,DATA22  ;高字部分带进位相加

    MOV RESULT,AX       ;存放低字部分相加结果

    MOV RESULT2,DX        ;存放高字部分相加结果  

CODE ENDS

  END START

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章