汇编语言32位乘法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

assume cs:code,ds:data

data segment

NA dw 0F321H,09AFCH

NB dw 08818H,0301DH

;-------第一个字是等待相乘的数的高16位,第二个是低十六位

T1 dw 0,0,0

T2 dw 0,0,0

;-------32位数乘以16位数不可能大于48位,所以分配3个字

R dw 0,0,0,0

;-------32位数乘以32位数不可能大于64位,所以为结果分配4个字

data ends

code segment

start:mov ax,data

mov ds,ax

;-------初始化段寄存器

Step1:mov ax,NA+2

mov bx,NB+2

mul bx

mov T1+4,ax

mov cx,dx

;-------Number A的低16位乘以Number B 的低十六位,结果存入T1+4 ;进位存入CX

mov ax,NA

mov bx,NB+2

mul bx

mov T1+2,ax

add T1+2,cx

adc T1,dx

;-------Number A的高16位乘以Number B 的低十六位,结果存入T1+4 ;结果存入T1+2,将T1+2与上一次相乘的进位相加存入T1+2

;将第二次相乘的进位带符号相加入T1(前一位的相加可能产生进位) Step2:mov ax,NA+2

mov bx,NB

mul bx

mov T2+4,ax

mov cx,dx

;-------同理

mov ax,NA

mov bx,NB

mul bx

mov T2+2,ax

add T2+2,cx

adc T2,dx

;-------同理

SUM:mov ax,T1+4

mov R+6,ax

mov ax,T2+4

add T1+2,ax

mov ax,T1+2

mov R+4,ax

mov ax,T2+2

adc T1,ax

mov ax,T1

mov R+2,ax

mov ax,T2

adc R,ax

;-------错位相加

mov ax,4C00H

int 21H

code ends

end start

原理图:

NA NA+2

×NB NB+2

——————————————————

T1 T1+2 T1+4

+T2 T2+2 T2+4

——————————————————

R R+2 R+4 R+6

编写一个程序,从键盘上连续输入多个字符,遇到“$”时终止,然后以与输入相反的顺序将该字符串以大写的形式在屏幕上显示出来

要求:用“先进后出”的设计思路,使用堆栈技术,结合DOS的中断调用,实现输入字符串的倒序显示

CODE SEGMENT ;作业

ASSUME CS:CODE,ds:code

org 100h

START:

push cs

pop ds

cld

lea dx,msg

mov ah,9

int 21h ;提示

xor cx,cx

t0:mov ah,1

int 21h ;接收数据

cmp al,'$' ;'$'结束程序

jz show

cmp al,'a'

jb y1

cmp al,'z'

ja y1

sub al,20h ;小写转大写

y1:inc cx

push ax

jmp t0

jcxz quit

show:

mov al,0dh

inc cx

push ax

mov al,0ah

inc cx

push ax ;字符串倒序输出mov cx,cx

next:

pop dx

mov ah,2

int 21h

loop next

quit:

mov ah,1

int 21h ;等待

MOV AX,4C00H

INT 21H

msg db 09,'Input a string...',0dh,0ah,'$'

CODE ENDS

END START

相关文档
最新文档