寒假汇编语言作业(4)
程序设计项目四
编程计算x(x>2)的y(y>2)次方。使用add指令实现。
另,若学到第10章,使用两种方式实现:
(1)只使用add指令实现;
(2)只使用mul指令实现;
并将计算式显示在屏幕中央。
例如:
计算4的3次方。在屏幕中央显示格式如下:
4
^
3
-----
64
注意:结果不能超过16位寄存器可存储的最大值。
参考代码:
//坐标不正确,切用ADD的方法没有想出来
1 assume cs:code 2 data segment 3 dw 1h 4 dw 2h 5 dd 0 6 dw 0ah 7 dw 3 dup (0) 8 data ends 9 10 stack segment 11 dw 16 dup() 12 stack ends 13 14 code segment 15 start: 16 mov ax,data 17 mov ds,ax 18 mov ax,stack 19 mov ss,ax 20 mov sp,20h 21 mov ax,0b800h 22 mov es,ax 23 ; call get_1 ;用add 尚没有方法 24 call get_2 25 mov ax,ds:[0] 26 mov di,280h 27 call show_8 28 mov ax,ds:[2] 29 mov di,320h 30 call show_8 31 mov di,3c0h 32 mov ax,'^' 33 mov ah,71h 34 mov es:[di],ax 35 mov di,460h 36 call show_16 37 mov ax,4c00h 38 int 21h 39 40 show_8: 41 mov bx,0 42 s8: 43 mov dx,0 44 div word ptr ds:[8] 45 add dx,30h 46 push dx 47 mov cx,ax 48 inc bx 49 jcxz ok8 50 jmp s8 51 ok8: 52 mov cx,bx 53 s8_: 54 pop ax 55 mov ah,71h 56 mov es:[di],ax 57 add di,2 58 loop s8_ 59 ret 60 61 show_16: 62 mov ax,ds:[4] 63 mov ds:[10],ax 64 mov ax,ds:[6] 65 mov ds:[12],ax 66 mov bx,0 67 s16: 68 mov dx,0 69 call divdw 70 add dx,30h 71 push dx 72 inc bx 73 mov cx,ax 74 jcxz ok16 75 jmp s16 76 ok16: 77 mov cx,bx 78 ok16_: 79 pop ax 80 mov ah,71h 81 mov es:[di],ax 82 add di,2 83 loop ok16_ 84 ret 85 86 get_1: 87 ret 88 89 get_2: ;mul 90 mov dx,0 91 mov ax,1 92 mov cx,ds:[2] 93 sg2: 94 mul word ptr ds:[0] 95 loop sg2 96 mov ds:[4],ax 97 mov ds:[6],dx 98 ret 99 100 divdw: 101 mov ax,ds:[12] 102 div word ptr ds:[8] 103 mov ds:[12],ax 104 mov ax,ds:[10] 105 div word ptr ds:[8] 106 mov ds:[10],ax 107 mov ds:[14],ax 108 or ax,ds:[12] 109 ret 110 111 code ends 112 end start