第一道、-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-注释stack segment stack ;定义堆栈dw 100 dup(0) stack ends data segment ;数据段开始bin dw 7462 buf db 6 dup(0),0dh,0ah,'$' ten dw 10 data ends code segment assume cs:code,ds:data,ss:stack ;约定寄存器start: mov ax, data mov ds,axmov ax,bin ;把bin值读入axor ax,ax ;对值无影响,影响标志位jns plus ;sf=0,即为正数时转移到plusneg ax ;负数的话取负mov buf,'-' ;把'-'赋给buf第一个字节jmp next plus: mov buf,'+' ;把'+'赋给buf第一个字节next: mov cx,5 ;初始化循环变量l1: mov dx,0 ;dx清零,为了不影响下面的除法div ten ;ten是个字类型,所以拿dx:ax表示的32位数除以10push dx ;把除得余数压栈,为了反向输出loop l1 mov cx,5 ;循环初始化lea bx,buf+1 ;把buf+1的偏移地址赋给bxl2: pop ax ;把依次压进去的余数弹出来add al,30h ;把数字转换成对应的字符mov[bx], al ;把转换得来的字节放到bx指向的内存中inc bx ;bx指针右移一字节loop l2 ;循环5次lea dx,buf ;把buf的偏移地址赋给dxmov ah,9 int 21h ;用9号中断显示字符串mov ah,4ch int 21h ;正常退出程序code ends end start程序框图:饿,,不会画,,,根据注释写出来应该比较容易功能:以十进制形式在屏幕上显示bin的值结果:+07462第二道、-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-data segmentnum equ 60p1 db 'string:',0dh,0ah,'$'p2 db 0ah,0dh,'right-adjusting of string:',0dh,0ah,'$'string1 db num,0,num dup(' '),0ah,0dh,'$'string2 db num,0,num dup(' '),0ah,0dh,'$'strout db num dup(?),num dup(?)data endsstack1 segment para stackstack1 endscode segmentassume cs:code,ds:data,ss:stack1,es:datastart:mov ax,datamov ds,axmov es,axlea dx,p1mov ah,9int 21h ;这3行显示p1指向的字符串lea dx,string1mov ah,0ahint 21h ;这3行调用10号中断向ds:dx内存输入字符串mov dl,0ahmov ah,2int 21h ;换行lea dx,string2mov ah,0ahint 21h ;输入第二行字符串lea dx,p2mov ah,9int 21h ;显示p2字符串lea di,strout ;strout偏移地址赋给dilea si,string1+1 ;第一次输入字符串实际输入的字符数xor cx,cxmov cl,byte ptr[si] ;循环输入字符串个数次lp_1:inc si ;si指针右移1字节mov al,byte ptr[si]mov byte ptr[di],al ;这两句实现字符串复制到输出字符串里inc di ;di右移一字节loop lp_1lea si,string2+1 ;这段循环和上面一样,只不过复制string2xor cx,cxmov cl,byte ptr[si]lp_2:inc simov al,byte ptr[si]mov byte ptr[di],alinc diloop lp_2mov byte ptr[di],'$' ;给字符串末端加上'$'符号lea dx,stroutmov ah,9int 21h ;把最终结果输出出来mov ah,4chint 21h ;正常退出code endsend start输出结果:string:abcde123cderight-adjusting of string:abcde123cde 20210311